PHP入門 正規表現の基本

正規表現の基本について解説しています。正規表現によって表されたある文字列パターンのことを正規表現パターンといいます。また、与えられた正規表現パターンが、ある文字列の中に含まれる場合、文字列が正規表現パターンにマッチすると言います。

PHPで利用できる主な正規表現パターン

分類 パターン マッチする文字列
基本 XYZ [XYZ]という文字列
[XYZ] X、Y、Zいずれかの1文字
[^XYZ] X、Y、Z以外のいずれかの1文字
[X-Z] XからZの範囲の中の1文字
[X|Y|Z] X、Y、Zいずれか
量指定 X* 0文字以上のX(”so*n”の場合”sn”、”son”、”soon”、”sooon”などにマッチ)
X? 0文字、または1文字のX(”so?n”の場合”sn”、”son”にマッチ)
X+ 1文字以上のX(”so+n”の場合”son”、”soon”、”sooon”などにマッチ)
X{n} Xとn回一致(”so{2}n”の場合”soon”にマッチ)
X{n,} Xとn回以上一致(”so{2}n”の場合”soon”、”sooon”にマッチ)
X{m,n} Xとm~n回一致(”so{2,3}n”の場合”soon”、”sooon”にマッチ)
位置指定 ^ 行の先頭に一致
$ 行の末尾に一致
\A 文字列の先頭に一致
\z 文字列の末尾に一致
\Z 文字列の末尾、または末尾の改行に一致
文字セット . 任意の1文字
\w 単語文字、数字、アンダースコアに一致
\W 文字以外に一致
\d 10進数値に一致
\D 数字以外に一致
\n 改行(ラインフィード)に一致
\r 復帰(キャリッジリターン)に一致
\t タブ文字に一致
\s 空白文字に一致
\S 空白以外の文字に一致

例:URLを表す正規表現パターン

http(s)?://([\w-]+\.)+[\w]+(/[\w ./?%&=-]*)?

まず、「http(s)?」に含まれる「(s)?」は、「s」が0~1回登場することを意味していますので、「http://」か「https://」にマッチします。続く、「([\w-]+.)+[\w]+」は、英数字/アンダースコア(\w)、ハイフンで構成される文字列で、途中にピリオド(\.)を含むことを意味します。そして、「(/[\w ./?%&=-]*)」で後続の文字列が英数字、アンダースコア(\.)、その他の記号(?、%、&、=、-など)を含む文字から構成されることを意味します。

構文:正規表現パターン

/pattern/opts
pattern正規表現パターン
opts修飾子(動作オプション)

正規表現パターンは、まずパターン本体を「/~/」のように囲む必要があります。慣例的に「/」を使いますが、「|~|」のように違う文字で囲んでもかまいません。URLなど/を使用する場合エスケープが多くなるような場合は「|」を使用すると良いでしょう。

エスケープ例

/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w .\/?%&=-]*)?/
正規表現パターンはシングルクォートでくくる
正規表現パターンは文字列リテラルなので、シングルクォートとダブルクォートどちらからでくくりますが、シングルクォートでくくるようにします。理由は、ダブルクォート内の「\~」はエスケープシーケンスとみなされてしまうからです。ダブルクォートの中では、「\w」のような正規表現パターンが正しく認識されません。