【PHP日記】

自分の知識不足を悟った末、なるべく1日一回、Webに関する知識を書いていくだけのブログ。

正規表現の総まとめ 【10日目】

フォームを作成する際に「正規表現」についての理解が必須に感じたので、表にしてまとめてみます。 追記があれば更新します。

正規表現一覧

記号/
表現方法
概要 使用例
. 任意の1文字 a.cabcaxcにマッチ
* 直前のパターンの0回以上の繰り返し ab*cac, abc, abbcにマッチ
+ 直前のパターンの1回以上の繰り返し ab+cabc, abbcにマッチ
? 直前のパターンの0回または1回の出現 ab?cac, abcにマッチ
^ 行の先頭にマッチ ^abcabcが行の先頭にある場合にマッチ
$ 行の末尾にマッチ abc$abcが行の末尾にある場合にマッチ
[] カッコ内のどれか1文字にマッチ [abc]a, b, cのいずれかにマッチ
[^] カッコ内のいずれとも異なる1文字にマッチ [^abc]a, b, c以外の任意の文字にマッチ
() グループ化 (abc)+abc, abcabcにマッチ
\ 特殊文字エスケープ \., \\.\にマッチ
\d 任意の数字にマッチ \d{2,4}は2桁から4桁の数字にマッチ
\w 単語構成文字にマッチ(アルファベット、数字、アンダースコア) \w+は単語にマッチ
\s 空白文字にマッチ \s+は空白文字の連続にマッチ
| 複数のパターンのいずれかにマッチ a|baまたはbにマッチ
\b 単語の先頭、末尾にマッチ my\bmy father, Tommyにマッチ



文字クラス内での挙動

文字クラス内で特殊な挙動を行う記号について、いくつか例を挙げて説明していきます。


ハイフン-の使用

文字クラス内でハイフンを使用すると範囲を指定できます。例えば、[a-z]は小文字のアルファベット全体にマッチします。

[0-9]    // 0から9のいずれかの数字にマッチ
[a-z]    // 小文字のアルファベットにマッチ


キャレット^の使用

文字クラス内でキャレットを最初に置くと否定の意味になります。例えば、[^0-9]は数字以外の任意の文字にマッチします。

[^a-z]    // 小文字のアルファベット以外にマッチ
[^0-9]  // 数字以外の任意の文字にマッチ

因みに、先頭以外でキャレットを使う場合は「文字」としてのキャレットになります。

[^abc]    // a, b, c以外の任意の1文字にマッチ
[abc^]    // a, b, c, ^のいずれか1文字にマッチ


バックスラッシュ\エスケープ

文字クラス内で特殊文字をそのままマッチさせたい場合、バックスラッシュを使用してエスケープします。

[a-z\$]    // 小文字のアルファベットとドル記号にマッチ
[0-9\.\-]    // 数字、ドット、ハイフンにマッチ



補足

正規表現を使う上でよく使うTips、補足情報を記載しておきます。


量指定子

「何個〜何個」のように桁数を表すには、{最小桁数,最大桁数} の形式で指定します。したがって以下のようになります。

^\d{1,6}$    // 1桁の数字から6桁の数字で、文字列全体が数字のみで構成されている場合にマッチ
{2,}    // 2回以上の繰り返し


メールアドレスの検証

簡単なメールアドレスの検証パターンは以下の通りです。

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b


貪欲マッチと非貪欲マッチ

.*は貪欲マッチ(できるだけ最長のマッチング)といい、.*?は非貪欲マッチ(できるだけ最小のマッチング)をいいます。

<div>内容1</div><div>内容2</div>

例えば上記のようなHTMLのコードがあるとして、それぞれフィルターを掛けて検索すると以下のようになります。

<.*>    // <div>内容1</div><div>内容2</div> 全体がマッチ
<.*?>    // <div> がマッチ

つまり貪欲マッチは最初の<から最後の>までを抽出し、非貪欲マッチでは最初の<から次の>までを抽出しています。


以上です。