PHP 正規表現
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[PHP]]
#norelated
PHPで、正規表現(パターンマッチ)を使おう!
#contents
* 正規表現とは? [#efc910d2]
[[正規表現 - Wikipedia>http://ja.wikipedia.org/wiki/%E6%A...
>正規表現(せいきひょうげん、regular expression)とは、文...
* 参考リンク [#vb592918]
| PHP 正規表現の基本 (preg_match) - どうにかなるBLOG | ...
| サルにもわかる正規表現入門 | http://www.mnet.ne.jp/~nak...
| 正規表現の解説 初級編 | http://www4.ocn.ne.jp/~kaerume...
| 図解でみる正規表現入門 | http://funcchan.blog16.fc2.com...
| 正規表現/PHP入門 | http://www.scollabo.com/banban/php/p...
| よく使う正規表現 - PHP入門(正規表現3) - イクケン | http...
* PHPの正規表現 [#pe85aadc]
PHPでは、正規表現を扱う関数が3種類用意されています。
http://www.php.net/manual/ja/refs.basic.text.php
| 関数 | 機能 | マルチバイト文字 |h
| [[POSIX拡張正規表現関数>http://www.php.net/manual/ja/bo...
| [[PCRE関数>http://www.php.net/manual/ja/book.pcre.php]]...
| [[マルチバイト文字列関数>http://php.net/manual/ja/ref.m...
- [[POSIX>http://e-words.jp/w/POSIX.html]] = Portable Op...
UNIXベースのOSが備えるべき最低限の仕様のセット。
POSIX正規表現は、UNIXで使われている正規表現をベースにして...
- POSIX正規表現は非推奨
http://www.php.net/manual/ja/reference.pcre.pattern.posix...
>PHP 5.3.0 以降、POSIX 正規表現 拡張モジュールは非推奨と...
- [[PCRE>http://ja.wikipedia.org/wiki/Perl_Compatible_Reg...
PHPでは、POSIX互換の正規表現関数よりも、Perl互換の正規表...
** POSIX 正規表現関数 [#vec1d18c]
http://www.php.net/manual/ja/ref.regex.php
| ereg_replace | 正規表現による置換を行う |
| ereg | 正規表現によるマッチングを行う |
| eregi_replace | 大文字小文字を区別せずに正規表現による...
| eregi | 大文字小文字を区別せずに正規表現によるマッチン...
| split | 正規表現により文字列を分割し、配列に格納する |
| spliti | 大文字小文字を区別しない正規表現により文字列を...
| sql_regcase | 大文字小文字を区別しないマッチングのため...
** PCRE(Perl互換正規表現)関数 [#t9ccbf8f]
http://www.php.net/manual/ja/book.pcre.php
| preg_filter | 正規表現による検索と置換を行う |
| preg_grep | パターンにマッチする配列の要素を返す |
| preg_last_error | 直近の PCRE 正規表現処理のエラーコー...
| [[preg_match_all>http://www.php.net/manual/ja/function....
| [[preg_match>http://www.php.net/manual/ja/function.preg...
| preg_quote | 正規表現文字をクオートする |
| preg_replace_callback | 正規表現検索を行い、コールバッ...
| preg_replace | 正規表現検索および置換を行う |
| preg_split | 正規表現で文字列を分割する |
** マルチバイト文字列関数 [#u9e5785d]
http://php.net/manual/ja/ref.mbstring.php
| mb_ereg_match | マルチバイト文字列が正規表現に一致する...
| mb_ereg_replace | マルチバイト文字列に正規表現による置...
| mb_ereg_search_getpos | 次の正規表現検索を開始する位置...
| mb_ereg_search_getregs | マルチバイト文字列が正規表現に...
| mb_ereg_search_init | マルチバイト正規表現検索用の文字...
| mb_ereg_search_pos | 指定したマルチバイト文字列が正規表...
| mb_ereg_search_regs | 指定したマルチバイト文字列が正規...
| mb_ereg_search_setpos | 次の正規表現検索を開始する位置...
| mb_ereg_search | 指定したマルチバイト文字列が正規表現に...
| mb_ereg | マルチバイト文字列に正規表現マッチを行う |
| mb_eregi_replace | マルチバイト文字列に大文字小文字を区...
| mb_eregi | マルチバイト文字列に大文字小文字を区別しない...
| mb_regex_encoding | 現在の正規表現用のエンコーディング...
| mb_regex_set_options | マルチバイト正規表現関数のデフォ...
| mb_split | マルチバイト文字列を正規表現により分割する |
* PCREのパターン構文 [#jc4e7be3]
http://php.net/manual/ja/reference.pcre.pattern.syntax.php
以下、preg_match()等、PCRE関数の使い方のまとめです。
PHPマニュアルの和訳は、ちょっと文章が硬くて分かりづらいで...
** デリミタ [#j49d8c04]
http://www.php.net/manual/ja/regexp.reference.delimiters....
>PCRE 関数を使うときには、パターンを delimiters で囲まな...
英数字、バックスラッシュ、空白文字以外の任意の文字をデリ...
デリミタとしてよく使われる文字は、スラッシュ (/)、 ハッシ...
次に示す例は、どれも正しいデリミタです。
#code(php){{
/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%
}}
-用語:デミリタ(delimiter) = 「区切り」を意味する記号、...
-正規表現で文字列のパターンを指定するとき、パターンの前後...
-通常、デミリタの記号として「/」(スラッシュ)という文字...
例: $pattern = '/abc/';
** メタ文字 [#w73b17aa]
メタ文字=文字列の構造(文字の繰り返し等)を表現するため...
http://www.php.net/manual/ja/regexp.reference.meta.php
>正規表現の強力さは、パターン中に&color(red){選択肢};や&c...
選択肢や繰り返しは、メタ文字 (meta-character) を使ってパ...
メタ文字は、その文字自体を表わさず、代わって特別な解釈が...
>メタ文字には、2種類あります。
ひとつは、角カッコ内を除き、パターン中のどこででも使用で...
もうひとつは、角カッコで括られた中でだけ使用できる文字で...
*** 角カッコの外で使用できるメタ文字 [#s8fd7896]
| メタ文字 | 機能 |h
| \ | 多目的に使う一般的なエスケープ文字 |
| ^ | 検索対象(複数行モードでは行)の始まりを言明 |
| $ | 検索対象(複数行モードでは行)の終わりを言明 |
| . | 改行を除くすべての文字にマッチ(デフォルト時) |
| [ | 文字クラス定義の開始 |
| ] | 文字クラス定義の終了 |
| | | 選択枝の開始 |
| ( | サブパターンの開始 |
| ) | サブパターンの終了 |
| ? | ( の意味を拡張/0 または 1 回マッチ/なるべく少ない...
| * | 0回以上の繰り返し |
| + | 1回以上の繰り返し |
| { | 最小/最大を指定する量指定子の開始 |
| } | 量指定子の終了 |
*** 角カッコの内で使用できるメタ文字 [#od62c9ef]
パターン中の角カッコで括まれた部分を「&color(red){文字ク...
| メタ文字 | 機能 |h
| \ | 一般的なエスケープ文字 |
| ^ | クラスの否定。ただし、文字クラスの最初の文字に用い...
| - | 文字の範囲の指定 |
| ] | 文字クラスの終了 |
*** 「メタ」とは? [#tfacf0ea]
メタ文字の「メタ」(meta)とは、「超」という意味。
http://www.mnet.ne.jp/~nakama/regexp1.html
>特殊文字を正規表現では、「メタ文字」と呼んでいます。
「メタ」というのは、「超」と言う意味で、あの「チョーむか...
普通の文字以上の意味を含んでいるという意味になるかと思い...
** エスケープシーケンス [#m4e75d1d]
http://www.php.net/manual/ja/regexp.reference.escape.php
*** メタ文字の処理 [#gf10ded8]
正規表現で使われるメタ文字(「*」や「+」等の文字)を、正...
>バックスラッシュ〔日本語環境では円記号となる場合もある〕...
ひとつめの使用法は、非英数字の前に記述する場合で、続く文...
このエスケープ文字としての使用法は、文字クラスの内外部い...
例: $pattern = '/12\*89/';
-「*」の意味が変わる。
-「0回以上の繰り返し」を意味するメタ文字の「*」としてでは...
-パターン /12\*89/ は、「12*89」という文字列にマッチする。
*** 非表示文字の指定 [#i204f0a6]
検索・置換したい文字列の中に、改行やタブなどの非表示文字...
>バックスラッシュの 2 番目の使用法は、非表示文字〔制御コ...
ヌル文字はパターンを終了させてしまうため使えませんが、そ...
(例)
| エスケープシーケンス | 意味 |h
| \n | 改行 (newline) |
| \t | タブ |
*** 文字型の指定 [#p4639179]
>バックスラッシュの第3の使用法は、包括的な文字型を指定す...
(例)
| エスケープシーケンス | 意味 |h
| \d | 10進数字 |
| \s | 空白文字 |
*** 条件指定 [#hfa78ab3]
>バックスラッシュの第 4 の使用法は、簡単な言明 (assertion...
言明とは、マッチがある特定の位置でだけ可能だという条件を...
サブパターンを使ったより複雑な言明の方法もありますが、そ...
バックスラッシュを使った言明は、次のものがあります
(例)
| エスケープシーケンス | 意味 |h
| \G | マッチングの開始位置 |
| \A | 検索対象文字列の始端(複数行モードとは独立) |
| \Z | 検索対象文字列の終端、または終端の改行(複数行モー...
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_3
>\A
文字列の最初
文字列の最初にマッチします。
マッチ対象文字列が複数行になっていても、その文字列の一番...
>\Z
文字列の最後
文字列の最後にマッチします。
マッチ対象文字列が複数行になっていても、その文字列の一番...
** Unicode 文字プロパティ [#f8d88ef6]
http://www.php.net/manual/ja/regexp.reference.unicode.php
** アンカー [#s786b6be]
アンカーは、文字列内の特定の位置(行頭、行末など)を表す...
通常、マッチするのは「文字」に対してだが、アンカーは「位...
http://www.php.net/manual/ja/regexp.reference.anchors.php
>ハット記号 (^)
マッチング位置が対象文字列の始端
>ドル記号 ($)
マッチング位置が 対象文字列の終端にあるか、文字列の終わり...
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_3
> ^
行頭
行のはじめの位置にマッチします。始めの文字ではありません...
\n」の次(文字列があれば)には必ず「^」があることになりま...
> $
行末
行の終端位置にマッチします。終わりの文字ではありません。
** ドット [#e59060d7]
http://www.php.net/manual/ja/regexp.reference.dot.php
>パターン中のドット(ピリオド、終止符)は、文字クラス外で...
非出力文字も含まれます。
ただし、(デフォルトでは)改行文字とはマッチしません。
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_2
「.」(ピリオド)は、改行を除く任意の1文字を表す。
** 文字クラス [#y1a1ecfb]
http://www.php.net/manual/ja/regexp.reference.character-c...
>開き角カッコは文字クラス (character class) の開始を表し...
閉じ角カッコだけでは、特別な意味を持ちません。
閉じ角カッコを文字クラスのメンバとしたい場合は、文字クラ...
>文字クラスは、検索対象文字列のたかだか1文字にマッチしま...
マッチする文字は、その文字クラスによって定義された文字集...
ただし、文字クラスの最初の文字がハット記号の場合は、マッ...
ハット記号自体をクラスのメンバとしたい場合は、文字クラス...
ワォ~!PHPマニュアルの文章は硬い!(訳分からんw)
** 選択肢 [#i353b515]
http://www.php.net/manual/ja/regexp.reference.alternation...
>縦線は、パターンに選択肢 (alternative) を列挙するために...
例えば、パターン
gilbert|sullivan
は、"gilbert" または "sullivan" にマッチします。
選択肢の数に制限はありません。
また、空の選択肢も可能です (空の文字列にマッチします)。
マッチの手順としては、各選択肢が左から右に順にマッチする...
** 内部オプション設定 [#kcd7c294]
http://www.php.net/manual/ja/regexp.reference.internal-op...
** サブパターン [#ma301739]
http://www.php.net/manual/ja/regexp.reference.subpatterns...
>サブパターンは、丸カッコで括られたパターンのことで、ネス...
パターンの一部をサブパターンにすると、以下の 2 つのことが...
> 1.選択肢の範囲の指定 (localize)。
例えば、パターン cat(aract|erpillar|) は、単語 "cat", "ca...
カッコをつけないと、このパターンは、"cataract", "erpillar...
> 2.サブパターンによる値の取得(キャプチャ)。
パターン全体としてマッチに成功した場合、対象文字列の内、...
開きカッコの数が(1 から始まって)左から右に数えられ、キ...
>例えば、文字列 "the red king" に対し、パターン
the ((red|white) (king|queen))
をマッチングさせた場合、キャプチャされる部分文字列は、 "r...
** 繰り返し [#l3b26f20]
http://www.php.net/manual/ja/regexp.reference.repetition....
>繰り返し (repetition) は、量指定子 (quantifier) を使って...
量指定子は、以下の要素の後に付けることが出来ます。
- 個々の文字。エスケープされた文字も含む
- メタ文字「.」(ドット)
- 文字クラス
- 後方参照
- カッコで括られたサブパターン(言明は除く)
** 後方参照 [#mb0ab15d]
http://www.php.net/manual/ja/regexp.reference.back-refere...
** 言明 [#ib2d5e45]
http://www.php.net/manual/ja/regexp.reference.assertions....
>言明 (assertion) とは、カレントのマッチング位置の直前・...
単純な言明コード \b, \B, \A, \Z, \z, ^ および $ について...
より複雑な言明は、サブパターンを用いて記述します〔言明サ...
言明サブパターンには、2種類あります。
対象文字列においてカレントの位置の先を読むものと、後ろを...
>'''先読み'''言明 (lookahead assertion) は、 肯定の言明 (...
>'''戻り読み'''言明は、肯定の言明の場合 (?<= で始まり、 ...
(参考)
http://www.upken.jp/kb/ybAuLxOIsfZvLHlCyOJlRhjyOMKBHa.html
** 再試行無しのサブパターン [#vbac7f3b]
http://www.php.net/manual/ja/regexp.reference.onlyonce.php
** 条件付きサブパターン [#tad92959]
http://www.php.net/manual/ja/regexp.reference.conditional...
** コメント [#od6cb528]
http://www.php.net/manual/ja/regexp.reference.comments.php
** 再帰的パターン [#f90eaeaf]
http://www.php.net/manual/ja/regexp.reference.recursive.php
** パフォーマンス [#m57faa8d]
http://www.php.net/manual/ja/regexp.reference.performance...
* 参考書 [#icaa995e]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927...
</td>
<td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927...
<br>
坂田 健二<br>
毎日コミュニケーションズ<br>
2008-03-27<br>
</td></tr></table>
}}
サンプルコードは、「preg_match」関数の使用例に変更しまし...
** 文字クラスの使用 [#i1449b29]
>「0~9の数字のいずれか」や「a~zの英小文字のいずれか」の...
#code(php){{
<?php
$target = '123abc';
$pattern = '/[0123456789][0123456789]/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."には2桁の数字が含まれています。";
} else {
echo $target."には2桁の数字が含まれていません。";
}
}}
** メタ文字 [#ne37074d]
| メタ文字 | 説明 |h
| \d | 数字の1文字を表す(文字クラス[0-9]と同じ)|
| \D | 数字以外の1文字を表す(文字クラス[^0-9]と同じ)|
| \w | 英数字、アンダースコアの1文字を表す(文字クラス[a-...
| \W | 英数字、アンダースコア以外の1文字を表す(文字クラ...
| \s | 空白文字(半角スペース、タブ、改行文字)を表す(文...
| \S | 空白文字(半角スペース、タブ、改行文字)以外を表す...
#code(php){{
<?php
$target = '123abc';
$pattern = '/\d\d/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."には2桁の数字が含まれています。";
} else {
echo $target."には2桁の数字が含まれていません。";
}
}}
** 文字の繰り返しを表す(量指示子) [#jc4d3ce2]
>パターンマッチで直前のパターン(文字)が何回繰り返すがを...
(「.」は改行文字を除く任意の1文字を表すメタ文字です。)
| 量指示子 | 繰り返す回数 |h
| * | 0回以上繰り返す |
| + | 1回以上繰り返す |
| ? | 0回もしくは1回以上繰り返す |
| {m} | m回繰り返す |
| {m,} | m回以上繰り返す |
| {m.n} | m回以上、n回以下繰り返す |
#code(php){{
<?php
$target = 'body';
$pattern = '/b.+y/';
$result = preg_match($pattern, $target, $matches);
if ($result) {
echo $target."は「b.+y」にマッチします";
var_dump($matches);
} else {
echo $target."は「b.+y」にマッチしません";
}
}}
** マッチさせる位置を指定する(位置指示子) [#lddd0de8]
>パターンマッチでマッチさせる位置を指定するには次表に示す...
「^」をパターンの先頭に記述した場合は、「行の先頭」という...
パターンの先頭で「^」を文字の「^」として認識させるには「\...
また同様にパターンの最後の文字の「$」を記述するには「\$」...
| 位置指示子 | 指定位置 |h
| ^ | 行の先頭 |
| $ | 行の末尾 |
| \A | 文字列の先頭 |
| \Z | 文字列の末尾 |
| \b | 単語区切り |
| \B | 単語区切り以外 |
例えば、「a」から始まって「b」で終わるパターンは「^a.*b$...
#code(php){{
<?php
$target = 'a123b';
$pattern = '/^a.*b$/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."は「^a.*b$」にマッチします。";
} else {
echo $target."は「^a.*b$」にマッチしません。";
}
}}
** パターンにor条件を記述する [#w9149373]
>「'abc'または'xyz'にマッチする」というようなor条件をパタ...
「butterfly」または「butterflies」にマッチするというパタ...
#code(php){{
<?php
$target = 'Perfume butterfly';
$pattern = '/butterfl(y|ies)/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."にはbutterflyもしくはbutterfliesが含まれ...
} else {
echo $target."にはbutterflyもしくはbutterfliesが含まれ...
}
}}
** サブパターン [#fb58cf96]
| () | パターンをグループ化する。 |
* ツール [#ee496f5b]
PHP正規表現チェッカー ver1.0.3
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
終了行:
[[PHP]]
#norelated
PHPで、正規表現(パターンマッチ)を使おう!
#contents
* 正規表現とは? [#efc910d2]
[[正規表現 - Wikipedia>http://ja.wikipedia.org/wiki/%E6%A...
>正規表現(せいきひょうげん、regular expression)とは、文...
* 参考リンク [#vb592918]
| PHP 正規表現の基本 (preg_match) - どうにかなるBLOG | ...
| サルにもわかる正規表現入門 | http://www.mnet.ne.jp/~nak...
| 正規表現の解説 初級編 | http://www4.ocn.ne.jp/~kaerume...
| 図解でみる正規表現入門 | http://funcchan.blog16.fc2.com...
| 正規表現/PHP入門 | http://www.scollabo.com/banban/php/p...
| よく使う正規表現 - PHP入門(正規表現3) - イクケン | http...
* PHPの正規表現 [#pe85aadc]
PHPでは、正規表現を扱う関数が3種類用意されています。
http://www.php.net/manual/ja/refs.basic.text.php
| 関数 | 機能 | マルチバイト文字 |h
| [[POSIX拡張正規表現関数>http://www.php.net/manual/ja/bo...
| [[PCRE関数>http://www.php.net/manual/ja/book.pcre.php]]...
| [[マルチバイト文字列関数>http://php.net/manual/ja/ref.m...
- [[POSIX>http://e-words.jp/w/POSIX.html]] = Portable Op...
UNIXベースのOSが備えるべき最低限の仕様のセット。
POSIX正規表現は、UNIXで使われている正規表現をベースにして...
- POSIX正規表現は非推奨
http://www.php.net/manual/ja/reference.pcre.pattern.posix...
>PHP 5.3.0 以降、POSIX 正規表現 拡張モジュールは非推奨と...
- [[PCRE>http://ja.wikipedia.org/wiki/Perl_Compatible_Reg...
PHPでは、POSIX互換の正規表現関数よりも、Perl互換の正規表...
** POSIX 正規表現関数 [#vec1d18c]
http://www.php.net/manual/ja/ref.regex.php
| ereg_replace | 正規表現による置換を行う |
| ereg | 正規表現によるマッチングを行う |
| eregi_replace | 大文字小文字を区別せずに正規表現による...
| eregi | 大文字小文字を区別せずに正規表現によるマッチン...
| split | 正規表現により文字列を分割し、配列に格納する |
| spliti | 大文字小文字を区別しない正規表現により文字列を...
| sql_regcase | 大文字小文字を区別しないマッチングのため...
** PCRE(Perl互換正規表現)関数 [#t9ccbf8f]
http://www.php.net/manual/ja/book.pcre.php
| preg_filter | 正規表現による検索と置換を行う |
| preg_grep | パターンにマッチする配列の要素を返す |
| preg_last_error | 直近の PCRE 正規表現処理のエラーコー...
| [[preg_match_all>http://www.php.net/manual/ja/function....
| [[preg_match>http://www.php.net/manual/ja/function.preg...
| preg_quote | 正規表現文字をクオートする |
| preg_replace_callback | 正規表現検索を行い、コールバッ...
| preg_replace | 正規表現検索および置換を行う |
| preg_split | 正規表現で文字列を分割する |
** マルチバイト文字列関数 [#u9e5785d]
http://php.net/manual/ja/ref.mbstring.php
| mb_ereg_match | マルチバイト文字列が正規表現に一致する...
| mb_ereg_replace | マルチバイト文字列に正規表現による置...
| mb_ereg_search_getpos | 次の正規表現検索を開始する位置...
| mb_ereg_search_getregs | マルチバイト文字列が正規表現に...
| mb_ereg_search_init | マルチバイト正規表現検索用の文字...
| mb_ereg_search_pos | 指定したマルチバイト文字列が正規表...
| mb_ereg_search_regs | 指定したマルチバイト文字列が正規...
| mb_ereg_search_setpos | 次の正規表現検索を開始する位置...
| mb_ereg_search | 指定したマルチバイト文字列が正規表現に...
| mb_ereg | マルチバイト文字列に正規表現マッチを行う |
| mb_eregi_replace | マルチバイト文字列に大文字小文字を区...
| mb_eregi | マルチバイト文字列に大文字小文字を区別しない...
| mb_regex_encoding | 現在の正規表現用のエンコーディング...
| mb_regex_set_options | マルチバイト正規表現関数のデフォ...
| mb_split | マルチバイト文字列を正規表現により分割する |
* PCREのパターン構文 [#jc4e7be3]
http://php.net/manual/ja/reference.pcre.pattern.syntax.php
以下、preg_match()等、PCRE関数の使い方のまとめです。
PHPマニュアルの和訳は、ちょっと文章が硬くて分かりづらいで...
** デリミタ [#j49d8c04]
http://www.php.net/manual/ja/regexp.reference.delimiters....
>PCRE 関数を使うときには、パターンを delimiters で囲まな...
英数字、バックスラッシュ、空白文字以外の任意の文字をデリ...
デリミタとしてよく使われる文字は、スラッシュ (/)、 ハッシ...
次に示す例は、どれも正しいデリミタです。
#code(php){{
/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%
}}
-用語:デミリタ(delimiter) = 「区切り」を意味する記号、...
-正規表現で文字列のパターンを指定するとき、パターンの前後...
-通常、デミリタの記号として「/」(スラッシュ)という文字...
例: $pattern = '/abc/';
** メタ文字 [#w73b17aa]
メタ文字=文字列の構造(文字の繰り返し等)を表現するため...
http://www.php.net/manual/ja/regexp.reference.meta.php
>正規表現の強力さは、パターン中に&color(red){選択肢};や&c...
選択肢や繰り返しは、メタ文字 (meta-character) を使ってパ...
メタ文字は、その文字自体を表わさず、代わって特別な解釈が...
>メタ文字には、2種類あります。
ひとつは、角カッコ内を除き、パターン中のどこででも使用で...
もうひとつは、角カッコで括られた中でだけ使用できる文字で...
*** 角カッコの外で使用できるメタ文字 [#s8fd7896]
| メタ文字 | 機能 |h
| \ | 多目的に使う一般的なエスケープ文字 |
| ^ | 検索対象(複数行モードでは行)の始まりを言明 |
| $ | 検索対象(複数行モードでは行)の終わりを言明 |
| . | 改行を除くすべての文字にマッチ(デフォルト時) |
| [ | 文字クラス定義の開始 |
| ] | 文字クラス定義の終了 |
| | | 選択枝の開始 |
| ( | サブパターンの開始 |
| ) | サブパターンの終了 |
| ? | ( の意味を拡張/0 または 1 回マッチ/なるべく少ない...
| * | 0回以上の繰り返し |
| + | 1回以上の繰り返し |
| { | 最小/最大を指定する量指定子の開始 |
| } | 量指定子の終了 |
*** 角カッコの内で使用できるメタ文字 [#od62c9ef]
パターン中の角カッコで括まれた部分を「&color(red){文字ク...
| メタ文字 | 機能 |h
| \ | 一般的なエスケープ文字 |
| ^ | クラスの否定。ただし、文字クラスの最初の文字に用い...
| - | 文字の範囲の指定 |
| ] | 文字クラスの終了 |
*** 「メタ」とは? [#tfacf0ea]
メタ文字の「メタ」(meta)とは、「超」という意味。
http://www.mnet.ne.jp/~nakama/regexp1.html
>特殊文字を正規表現では、「メタ文字」と呼んでいます。
「メタ」というのは、「超」と言う意味で、あの「チョーむか...
普通の文字以上の意味を含んでいるという意味になるかと思い...
** エスケープシーケンス [#m4e75d1d]
http://www.php.net/manual/ja/regexp.reference.escape.php
*** メタ文字の処理 [#gf10ded8]
正規表現で使われるメタ文字(「*」や「+」等の文字)を、正...
>バックスラッシュ〔日本語環境では円記号となる場合もある〕...
ひとつめの使用法は、非英数字の前に記述する場合で、続く文...
このエスケープ文字としての使用法は、文字クラスの内外部い...
例: $pattern = '/12\*89/';
-「*」の意味が変わる。
-「0回以上の繰り返し」を意味するメタ文字の「*」としてでは...
-パターン /12\*89/ は、「12*89」という文字列にマッチする。
*** 非表示文字の指定 [#i204f0a6]
検索・置換したい文字列の中に、改行やタブなどの非表示文字...
>バックスラッシュの 2 番目の使用法は、非表示文字〔制御コ...
ヌル文字はパターンを終了させてしまうため使えませんが、そ...
(例)
| エスケープシーケンス | 意味 |h
| \n | 改行 (newline) |
| \t | タブ |
*** 文字型の指定 [#p4639179]
>バックスラッシュの第3の使用法は、包括的な文字型を指定す...
(例)
| エスケープシーケンス | 意味 |h
| \d | 10進数字 |
| \s | 空白文字 |
*** 条件指定 [#hfa78ab3]
>バックスラッシュの第 4 の使用法は、簡単な言明 (assertion...
言明とは、マッチがある特定の位置でだけ可能だという条件を...
サブパターンを使ったより複雑な言明の方法もありますが、そ...
バックスラッシュを使った言明は、次のものがあります
(例)
| エスケープシーケンス | 意味 |h
| \G | マッチングの開始位置 |
| \A | 検索対象文字列の始端(複数行モードとは独立) |
| \Z | 検索対象文字列の終端、または終端の改行(複数行モー...
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_3
>\A
文字列の最初
文字列の最初にマッチします。
マッチ対象文字列が複数行になっていても、その文字列の一番...
>\Z
文字列の最後
文字列の最後にマッチします。
マッチ対象文字列が複数行になっていても、その文字列の一番...
** Unicode 文字プロパティ [#f8d88ef6]
http://www.php.net/manual/ja/regexp.reference.unicode.php
** アンカー [#s786b6be]
アンカーは、文字列内の特定の位置(行頭、行末など)を表す...
通常、マッチするのは「文字」に対してだが、アンカーは「位...
http://www.php.net/manual/ja/regexp.reference.anchors.php
>ハット記号 (^)
マッチング位置が対象文字列の始端
>ドル記号 ($)
マッチング位置が 対象文字列の終端にあるか、文字列の終わり...
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_3
> ^
行頭
行のはじめの位置にマッチします。始めの文字ではありません...
\n」の次(文字列があれば)には必ず「^」があることになりま...
> $
行末
行の終端位置にマッチします。終わりの文字ではありません。
** ドット [#e59060d7]
http://www.php.net/manual/ja/regexp.reference.dot.php
>パターン中のドット(ピリオド、終止符)は、文字クラス外で...
非出力文字も含まれます。
ただし、(デフォルトでは)改行文字とはマッチしません。
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html#b3_2
「.」(ピリオド)は、改行を除く任意の1文字を表す。
** 文字クラス [#y1a1ecfb]
http://www.php.net/manual/ja/regexp.reference.character-c...
>開き角カッコは文字クラス (character class) の開始を表し...
閉じ角カッコだけでは、特別な意味を持ちません。
閉じ角カッコを文字クラスのメンバとしたい場合は、文字クラ...
>文字クラスは、検索対象文字列のたかだか1文字にマッチしま...
マッチする文字は、その文字クラスによって定義された文字集...
ただし、文字クラスの最初の文字がハット記号の場合は、マッ...
ハット記号自体をクラスのメンバとしたい場合は、文字クラス...
ワォ~!PHPマニュアルの文章は硬い!(訳分からんw)
** 選択肢 [#i353b515]
http://www.php.net/manual/ja/regexp.reference.alternation...
>縦線は、パターンに選択肢 (alternative) を列挙するために...
例えば、パターン
gilbert|sullivan
は、"gilbert" または "sullivan" にマッチします。
選択肢の数に制限はありません。
また、空の選択肢も可能です (空の文字列にマッチします)。
マッチの手順としては、各選択肢が左から右に順にマッチする...
** 内部オプション設定 [#kcd7c294]
http://www.php.net/manual/ja/regexp.reference.internal-op...
** サブパターン [#ma301739]
http://www.php.net/manual/ja/regexp.reference.subpatterns...
>サブパターンは、丸カッコで括られたパターンのことで、ネス...
パターンの一部をサブパターンにすると、以下の 2 つのことが...
> 1.選択肢の範囲の指定 (localize)。
例えば、パターン cat(aract|erpillar|) は、単語 "cat", "ca...
カッコをつけないと、このパターンは、"cataract", "erpillar...
> 2.サブパターンによる値の取得(キャプチャ)。
パターン全体としてマッチに成功した場合、対象文字列の内、...
開きカッコの数が(1 から始まって)左から右に数えられ、キ...
>例えば、文字列 "the red king" に対し、パターン
the ((red|white) (king|queen))
をマッチングさせた場合、キャプチャされる部分文字列は、 "r...
** 繰り返し [#l3b26f20]
http://www.php.net/manual/ja/regexp.reference.repetition....
>繰り返し (repetition) は、量指定子 (quantifier) を使って...
量指定子は、以下の要素の後に付けることが出来ます。
- 個々の文字。エスケープされた文字も含む
- メタ文字「.」(ドット)
- 文字クラス
- 後方参照
- カッコで括られたサブパターン(言明は除く)
** 後方参照 [#mb0ab15d]
http://www.php.net/manual/ja/regexp.reference.back-refere...
** 言明 [#ib2d5e45]
http://www.php.net/manual/ja/regexp.reference.assertions....
>言明 (assertion) とは、カレントのマッチング位置の直前・...
単純な言明コード \b, \B, \A, \Z, \z, ^ および $ について...
より複雑な言明は、サブパターンを用いて記述します〔言明サ...
言明サブパターンには、2種類あります。
対象文字列においてカレントの位置の先を読むものと、後ろを...
>'''先読み'''言明 (lookahead assertion) は、 肯定の言明 (...
>'''戻り読み'''言明は、肯定の言明の場合 (?<= で始まり、 ...
(参考)
http://www.upken.jp/kb/ybAuLxOIsfZvLHlCyOJlRhjyOMKBHa.html
** 再試行無しのサブパターン [#vbac7f3b]
http://www.php.net/manual/ja/regexp.reference.onlyonce.php
** 条件付きサブパターン [#tad92959]
http://www.php.net/manual/ja/regexp.reference.conditional...
** コメント [#od6cb528]
http://www.php.net/manual/ja/regexp.reference.comments.php
** 再帰的パターン [#f90eaeaf]
http://www.php.net/manual/ja/regexp.reference.recursive.php
** パフォーマンス [#m57faa8d]
http://www.php.net/manual/ja/regexp.reference.performance...
* 参考書 [#icaa995e]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927...
</td>
<td valign="top">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927...
<br>
坂田 健二<br>
毎日コミュニケーションズ<br>
2008-03-27<br>
</td></tr></table>
}}
サンプルコードは、「preg_match」関数の使用例に変更しまし...
** 文字クラスの使用 [#i1449b29]
>「0~9の数字のいずれか」や「a~zの英小文字のいずれか」の...
#code(php){{
<?php
$target = '123abc';
$pattern = '/[0123456789][0123456789]/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."には2桁の数字が含まれています。";
} else {
echo $target."には2桁の数字が含まれていません。";
}
}}
** メタ文字 [#ne37074d]
| メタ文字 | 説明 |h
| \d | 数字の1文字を表す(文字クラス[0-9]と同じ)|
| \D | 数字以外の1文字を表す(文字クラス[^0-9]と同じ)|
| \w | 英数字、アンダースコアの1文字を表す(文字クラス[a-...
| \W | 英数字、アンダースコア以外の1文字を表す(文字クラ...
| \s | 空白文字(半角スペース、タブ、改行文字)を表す(文...
| \S | 空白文字(半角スペース、タブ、改行文字)以外を表す...
#code(php){{
<?php
$target = '123abc';
$pattern = '/\d\d/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."には2桁の数字が含まれています。";
} else {
echo $target."には2桁の数字が含まれていません。";
}
}}
** 文字の繰り返しを表す(量指示子) [#jc4d3ce2]
>パターンマッチで直前のパターン(文字)が何回繰り返すがを...
(「.」は改行文字を除く任意の1文字を表すメタ文字です。)
| 量指示子 | 繰り返す回数 |h
| * | 0回以上繰り返す |
| + | 1回以上繰り返す |
| ? | 0回もしくは1回以上繰り返す |
| {m} | m回繰り返す |
| {m,} | m回以上繰り返す |
| {m.n} | m回以上、n回以下繰り返す |
#code(php){{
<?php
$target = 'body';
$pattern = '/b.+y/';
$result = preg_match($pattern, $target, $matches);
if ($result) {
echo $target."は「b.+y」にマッチします";
var_dump($matches);
} else {
echo $target."は「b.+y」にマッチしません";
}
}}
** マッチさせる位置を指定する(位置指示子) [#lddd0de8]
>パターンマッチでマッチさせる位置を指定するには次表に示す...
「^」をパターンの先頭に記述した場合は、「行の先頭」という...
パターンの先頭で「^」を文字の「^」として認識させるには「\...
また同様にパターンの最後の文字の「$」を記述するには「\$」...
| 位置指示子 | 指定位置 |h
| ^ | 行の先頭 |
| $ | 行の末尾 |
| \A | 文字列の先頭 |
| \Z | 文字列の末尾 |
| \b | 単語区切り |
| \B | 単語区切り以外 |
例えば、「a」から始まって「b」で終わるパターンは「^a.*b$...
#code(php){{
<?php
$target = 'a123b';
$pattern = '/^a.*b$/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."は「^a.*b$」にマッチします。";
} else {
echo $target."は「^a.*b$」にマッチしません。";
}
}}
** パターンにor条件を記述する [#w9149373]
>「'abc'または'xyz'にマッチする」というようなor条件をパタ...
「butterfly」または「butterflies」にマッチするというパタ...
#code(php){{
<?php
$target = 'Perfume butterfly';
$pattern = '/butterfl(y|ies)/';
$result = preg_match($pattern, $target);
if ($result) {
echo $target."にはbutterflyもしくはbutterfliesが含まれ...
} else {
echo $target."にはbutterflyもしくはbutterfliesが含まれ...
}
}}
** サブパターン [#fb58cf96]
| () | パターンをグループ化する。 |
* ツール [#ee496f5b]
PHP正規表現チェッカー ver1.0.3
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ページ名: