いまさらながらのPHP正規表現。

2008年3月21日 15:12

実はマッチングなどの処理を行うことが苦手なオレ。というのも正規表現の書き方がいまいち理解できていない。なんで、ちょっと今回自分のためにも整理。

正規表現を行う関数は、オーソドックスなもので
preg_match
preg_match_all
がある。・・・でこの書き方だが、
preg_match('/パターン/','マッチング対象');
と書く。このパターンのところがオイラにとっては問題が大きいところだったわけだ。記号が羅列してなんのことやら感が満載。整理しなきゃ。
ということで・・・
第1引数のパターンの前後には、"/"(スラッシュ)を入れる。これは基本。つまりこのスラッシュで囲まれた部分がパターンなのだ。
ちなみに、このスラッシュで囲むのをデリミタという。

で、この間にパターンを入れるわけだが、そこはまだあせらない。ケツのほうのスラッシュのあとに、パターン修飾子というものを挿入し、いわゆるモードを設定できる。
そのパターン修飾子は次の通り。
//i:大文字と小文字の区別をしない
//m:行単位でマッチング
//s:.(ドット)を改行文字にマッチさせる
//x:正規表現の中の空白やコメントを無視してマッチングする
//e:置換結果をPHPコードと評価して、その結果で置換する
//A:検索対象文字列の先頭にのみマッチするように制限する
//D:$を検索対象文字列の終わりにのみマッチする
//S:与えられた正規表現をより詳細に最適化する
//U:+や*などの繰り返しを抑制する
//X:存在しないメタ文字があれば、エラーにする
//u:UTF-8の文字列としてマッチする


このような修飾子をつけてマッチングを行うが、そのなかに記載するパターンが問題。ここで結構記号が色々でてくるので、オレはちょっと躓いている。
メタ文字で制御するわけだが、そのメタ文字は以下。

\:エスケープ文字
^:文字列の先頭
$:文字列の最後
.:改行を除くすべての文字
|:選択肢
[]:文字クラスを定義
():サブパターンを定義し、一致したものを記憶する
{}:繰り返しの回数を指定
*:直前の文字の0文字以上の繰り返し
+:直前の文字の1文字以上の繰り返し
?:0回または1回出現するもの

文字クラスのなかで定義するメタ文字は
\:エスケープ文字
^:含まれていない文字を指定
-:文字の範囲を指定


以上をふまえて、
preg_match('/ab/i','ABCDabcd');
と書けば、この内容は、
ABCDabcdの中から、大文字小文字の区別なく、abというパターンにマッチするものを探しなさい
という命令になる。
で、ここのabの前に^をつけると
preg_match('/^ab/i','ABCDabcd');
ABCDabcdの中から、大文字小文字の区別なく、abという文字が先頭にあるとき、パターンにマッチするものを探しなさい
となる。

ざっとまとめるとこうだけど、実際やるとなると結構ごっちゃになるので、気をつけながらサンプルを作成していこうと思う。

PHP | comment(0) | trackback(0) |

このブログ記事に対するトラックバックURL:

コメントする