繰り返し文字である+と*では、繰り返しの最も短い部分にマッチするように
なっています。たとえばパターンが「A+」、文字列「AAA」なら
AAAではなくAにマッチしたところで処理が完了します。
AAAなら、「一番左のA」にマッチします。
preg_match()関数では、3番目の引数に配列を指定すると、
マッチした部分の文字列が配列として格納されます。上の場合だと
1個のAが格納されます。
マッチ後もさらにマッチングを行う関数はpreg_match_all()関数です。
グループ化と選択
一定のパターンをグループにするときは()を使います。
例を挙げると、「(abc){2}」はabcの2回以上の繰り返しを表します。
「abcabc」にマッチしますが、「abc」にはマッチしません。
何れかを表すには「|」を表します。たとえば、「123|456」と書けば、
「123」か「456」にマッチします。
メタ文字 | 意味 |
---|---|
() | まとめる |
| | いずれか |
メタ文字をパターンの文字列とする
メタ文字をそのまま文字として使う場合は、
以下のように「\」をつけます。
「.」を表す
\.
「+」の1回以上の繰り返しです。
\++
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>行と・行末を表す正規表現</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php $pat = array("(123)+","123|456"); $str = array("12" ,"123" ,"212","12121"); ?> <table border="3"> <tr> <th>pattern</th> <th>string</th> <th>match</th> </tr> <?php foreach($pat as $valuePat){ foreach($str as $valueStr){ echo "<tr>"; echo "<td>{$valuePat}</td>"; echo "<td>{$valueStr}</td>"; $match = preg_match("/" . $valuePat . "/", $valueStr ); if( $match ){ $match = "YES"; }else{ $match = "NO"; } echo "<td>{$match}</td>"; echo "</tr>"; } } ?> </table> </body> </html> |