いまさらながらのPHP正規表現。
2008年3月21日 15:12
実はマッチングなどの処理を行うことが苦手なオレ。というのも正規表現の書き方がいまいち理解できていない。なんで、ちょっと今回自分のためにも整理。
正規表現を行う関数は、オーソドックスなもので
ということで・・・
第1引数のパターンの前後には、"/"(スラッシュ)を入れる。これは基本。つまりこのスラッシュで囲まれた部分がパターンなのだ。
ちなみに、このスラッシュで囲むのをデリミタという。
で、この間にパターンを入れるわけだが、そこはまだあせらない。ケツのほうのスラッシュのあとに、パターン修飾子というものを挿入し、いわゆるモードを設定できる。
そのパターン修飾子は次の通り。
このような修飾子をつけてマッチングを行うが、そのなかに記載するパターンが問題。ここで結構記号が色々でてくるので、オレはちょっと躓いている。
メタ文字で制御するわけだが、そのメタ文字は以下。
文字クラスのなかで定義するメタ文字は
ざっとまとめるとこうだけど、実際やるとなると結構ごっちゃになるので、気をつけながらサンプルを作成していこうと思う。
正規表現を行う関数は、オーソドックスなもので
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) | ▲
コメントする