第4章 正規表現
教科書「プログラミングPHP 第2版」
上級試験は、オライリーから出版されているプログラミングPHP 第2版を教科書に出題されます。
特殊文字
- ^は文字列の先頭、$は文字列の末尾。.は任意の一文字。
- 特殊文字にマッチさせたい場合はバックスラッシュを前に置く。例えば$にマッチさせるには\$
- []を使用すると、[]内の文字いずれか。例えばc[aeiou]tは、cat, cet, cit, cot, cut にマッチする
- -を使用することが可能、例えば数字は[0-9]
- []内の先頭の^は否定。
- |は、どちらかにマッチ。
- "cat" か "dog" のみにマッチするのは、^(cat|dog)$
※テキストではeregが用いられているが、php5.3でdeprecated、php6では廃止予定。
繰り返し
- ?は0または1回。*は0回以上。+は1回以上。
- {n}は、n回。{n,}はn回以上。{n,m}で、n回以上m回以下。
- 電話番号(US)の例。[0-9]{3}-[0-9]{3}-[0-9]{4}
置換、分割
- ereg_replace(パターン、置き換える文字列、元の文字列)
- 部分文字列は\1, \2等で指定できる
- splitで分割する(配列で返す)
perl互換正規表現
- デリミタ(スラッシュのことが多い)が必要
- .は\n以外にマッチ。$は文字列の末尾または末尾の\nの直前にマッチ
- \sは空白文字、\Sは空白でない文字。\wは単語を形成する文字、\Wは形成しない文字。\dは数字、\Dは非数字。
- \bは単語境界、\Bは単語境界でない。\Aは文字列の先頭、\Zは文字列の末尾か\nの直前。\zは文字列の末尾。
- デフォルトは欲張りマッチ。最小一致にするには、??, *?, +?のように?を追加する
- '/(<.*?>)/'の代わりに'/(<[^>]*>)/'とする方法もある
- \1のようにして既出パターンを取得できる(最大99)
- デリミタの後にオプションを記述できる。例えば、大文字小文字を区別しない場合はi。Table4-12, 4-13は要チェックかも。
- インラインでオプションを記述できる。例えば、'/(?i:PHP)/'
その他
- 先読み(マッチした場所までカーソル移動)で高速化。メールヘッダの送信者を探す時、'/(?=^From )/m'
- カット(cut) ?>を使う。'/(?>a+|b+)*\.+$/'
- 繰り返す場合はpreg_match_all。サブパターンで分ける(PREG_PATTERN_ORDER)か、マッチした文字列毎に分ける(PREG_SET_ORDER)
- preg_replaceで置換。オプションeで、置換後の文字列をPHPスクリプトとして扱う
- preg_splitで分離。explodeのほうが高速なので、使い分ける。
- preg_grepで配列のフィルタリング
- preg_quoteで正規表現用の文字列を作成
- Perlとの違い(Location 4726参照)
※原書を元にしています。日本語訳本とは用語等が異なる可能性があります。
Copyright (C) 2003-2018. PHP で WEB 作成 All rights reserved.