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文字以外に一致
\d10進数値に一致
\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」のような正規表現パターンが正しく認識されません。