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」のような正規表現パターンが正しく認識されません。
正規表現パターンは文字列リテラルなので、シングルクォートとダブルクォートどちらからでくくりますが、シングルクォートでくくるようにします。理由は、ダブルクォート内の「\~」はエスケープシーケンスとみなされてしまうからです。ダブルクォートの中では、「\w」のような正規表現パターンが正しく認識されません。