正規表現

正規表現の作り方

サンプル

正規表現とは、「あいまいな文字列を表現するための方法」です。例えば、郵便番号であれば「150-0002」(渋谷区渋谷)などのように3文字の数字とハイフン、さらに4文字の数字からなっています。こうしたチェックをするときに、「文字列パターン」として表現することが可能です。 具体的な書き方は後で紹介しますので、ひとまず正規表現を使ったzipcode.phpのサンプルを見てみましょう。

 

$zipcode1には正しい形式の郵便番号を、$zipcode2には一文字足りない郵便番号を代入しています。preg_match( )は正規表現で表された文字列パターンとチェック対象の文字列が一致するかどうかを調べます。正規表現に一致することを「マッチする」といいます。

preg_match( )はマッチした時に「1」を、しなかった時に「0」を返してきますので$result1には「1」、$result2には「0」が代入されます。var_dump( )で確認してみてください

正規表現の書き方

文字を表す構文

正規表現にはパターンに一致する文字列を特定するためのさまざまな構文が用意されています。正規表現は複雑に見えますが、構文さえ押さえてしまえば自分で作ったり、他人が作った正規表現を理解できるようになります。 性質ごとに分けてよく使う構文を見ていきましょう。

 

構文 説明
. 任意の一文字 /b..k/ 「book」などがマッチ
[] 文字クラス。 [a-z]で「aからzまで」を表す /p[a-g]n/ 「pen」などがマッチ
\d 数字 [0-9]と同じ /product\d/ 「product7」などにマッチ
\S 全ての文字(空白文字を除く)\s以外 /\S/ 「R、=、?」などにマッチ
\w 大文字小文字のアルファベット、数字、アンダーバー /\S/ 「R、=、?」などにマッチ
\W 非単語文字 /\W/ 「~、&」などにマッチ

繰り返しを表す構文

構文 説明
? 0回か1回 /r[a-z]?c/ 「rec」や「rc」にマッチ
* 0回以上の繰り返し /po*l/ 「pl」や「pool」にマッチ
\d 数字 [0-9]と同じ /product\d/ 「product7」などにマッチ
+ 1回以上の繰り返し /co+l/ 「cool」にマッチ、「cl」にはマッチしない
{n} n回の繰り返し /w[a-z]{2}e/ 「wake」「wipe」などにマッチ

 

パターン修飾子

パターン修飾子サンプル

 

このサンプルの中で「/taro/i」にあたる部分が正規表現ですね。「i」は「アルファベットの大文字と小文字を区別しない」ことを指定するパターン修飾子です。試しに「i」を削除して動作させてみてください。返り値が「0」になっていてマッチしていないはずです。これは「Taro」に対して「taro」の小文字がマッチしなかったためです。

 

正規表現のイメージは掴めましたでしょうか。正規表現は「メール 正規表現」などで検索すればさまざまな例が出てきますのですでに作られた正規表現を作るのもよいでしょう。自身で修正する場合は正規表現の知識が必要になります。また、違反ワードのチェック機能なども正規表現を使って制作することができます。