あんま正規表現ってコピペで済ますことが多かったので、自己確認用に覚え書きしておきます。
POSIX正規表現(バイナリーデータを正しく扱えない)は非推奨となり今後は使われなくなる可能性が高いのでPCRE関数を利用します。
POSIX正規表現の関数ってどんな物かと言えばereg系関数やsplit、sql_regcaseなどがあります。
mb_eregは大丈夫そうだけどpreg系の方が良さげ。
スポンサーリンク
パターン本体を/~/でくくるというのが一般的。「/」を使う場合は|~|や#~#でくくってもOK。
デフォルトでは大文字小文字を区別します。
Lightとlightではヒットしません。
ブランケット[]でくくった場合、その中の文字のいずれか1文字にマッチするかどうか判定します。
ブランケットの先頭に^があれば否定の意味になります。
/[opqr]/と panda はマッチします。
/h[^ijk]l/とhillはマッチしません。/h[ijk]l/ではマッチします。
[0-9]で0~9の範囲指定になります。
/[a-zA-Z]/ だとアルファベットすべてという範囲になります。
ドット「.」は任意の一文字を表します。
/p.n/ では penやpandaはマッチします。
/p..n/だとplanでマッチします
行頭/行末に特定のパターンがマッチするか確認したい場合は「^」(行頭)「$」(行末)を利用します。
ブランケットの中の[^](否定)とは異なりますのでご注意を。
/^ph/だと phpや photo、phaseなどがマッチします。
/$ize/だと sizeやcivilize、organizeなどがマッチします。
繰り返しパターン
X* 0文字以上のX (例 /go*gle/ の場合 ggle、gogle、googleでマッチします)
X+ 1文字以上のX (例 /go+gle/ の場合gogle、google、gooogleでマッチします)
X? 0または1文字のX (例 /go?gle/ の場合ggleかgogleでマッチします。)
X{n} n文字のX (例 /go{2}gle/ の場合 googleでマッチします。)
X{n,} n文字以上のX (例 /go{2,}gle/ の場合 google、gooogleでマッチします。)
X{m,n} m~n文字のX (例 /go{2,5}gle/ の場合 google、gooogle、goooogle、gooooogleでマッチします。)
特定の文字セットで表現
パターン
\t タブ文字
\n 改行(ラインフィード)
\r 復帰(キャリッジリターン)
\d 数値にマッチ[0-9]と同じ
\D 数値以外にマッチ[^0-9]と同じ
\s 空白文字にマッチ[\t\n\xOB\f\r]と同じ
\S 空白文字以外にマッチ[^\s]と同じ
\w 大文字/小文字のアルファベット、数字、アンダースコアにマッチ[a-zA-Z_0-9]と同じ
\W 文字以外にマッチ[^\w]と同じ
\b 単語の境界にマッチする
\B 単語の境界以外にマッチする
\x?? 16進数
パターン修飾子 /~/iの用に記述する。
i 大文字小文字を区別しない
m 複数行に対応(改行の前後も文字列の末尾/先頭として認識)
e 置き換え後の文字列PHPのコードとして処理
u 正規表現パターンをUTF-8文字列として扱う(パターンに日本語を含む場合は必須)