preg_match 関数を使用して文字列を検索する時など、PHP でも正規表現というワードを度々目にすると思いますが、明確なイメージを持ち難い言葉でもあります。
今回は そんな正規表現について、その内容や使い方を紹介します。
最終更新日:2019年6月26日
1.正規表現とは
2.メタ文字
3.正規表現の書き方
4.正規表現のサンプル
IT用語辞典 e-Wordsによると、「 正規表現とは、ある特定のパターンを持つ文字列を指定する表記法の一つ。文字列の検索や置換、抽出などを行う際の対象の指定などのために用いられる。」と定義されています。
例えば、ある文字列の中に数字が含まれているかどうかを確認したい場合には、数字のグループを [0-9] と表して preg_match 関数を「 preg_match(“[0-9]”, 文字列); 」のように使用すると、文字列の中に数字が含まれている場合は TRUE が返ります。
この [0-9] のような記述方法を正規表現といいます。
正規表現を使うと、「XXX-XXXX」のパターンで数字が並んでいる郵便番号を検索したり、「 <strong> で始まって </strong> で終わる文字列 」のように自由なパターンで文字列を検索したりすることができます。
正規表現は「 . 」や「 ^ 」など特殊文字を使用して記述します。
これらの特殊な文字のことをメタ文字といいます。
正規表現で使用する主なメタ文字は、次の通りです。
. | 任意の1文字 |
---|---|
^ | ~で始まる( [ ]内で使用すると除外を意味する ) |
$ | ~で終わる |
– | 文字の範囲指定 |
| | 又は |
* | 直前の文字を 0 回以上繰り返す |
+ | 直前の文字を 1 回以上繰り返す |
? | 直前の文字が無い 又は ある |
( | グループ化の開始 |
) | グループ化の終了 |
{ | 繰り返す回数指定の開始 |
} | 繰り返す回数指定の終了 |
[ | パターン定義の開始 |
] | パターン定義の終了 |
正規表現は、メタ文字と組み合わせて 以下のように記述します。
実際に使用する際には、正規表現をスラッシュ( / )で囲んで使用するのが一般的で、文字列として それをさらに引用符( ‘ や ” )で囲みます。
1 文字分を「 . 」で表すパターン |
---|
....年..月..日 “2019年06月26日”や”2019年 6月26日”などがパターンに一致 |
先頭を「 ^ 」で表すパターン |
---|
^de “decode”や”define”などがパターンに一致 |
末尾を「 $ 」で表すパターン |
---|
$able “capable”や”answerable”などがパターンに一致 |
又はを「 | 」で表すパターン |
---|
google|IE|Firefox|Safari “google”又は”IE”又は”Firefox”又は”Safari”の何れかであればパターンに一致 |
直前の文字の 0 回以上の繰り返しを「 * 」で表すパターン |
---|
Goo*al! “Gooal!”や”Goooooooal!”の他、直前の文字 o が1つも無い”Goal!”もパターンに一致 |
直前の文字の 1 回以上の繰り返しを「 + 」で表すパターン |
---|
Goo*al! “Gooal!”や”Goooooooal!”などがパターンに一致するが、* と違って 直前文字の o が1つも無い”Goal!”はパターンに一致しない |
直前の文字が無いかあるかどちらかを「 ? 」で表すパターン |
---|
Goo*al! “Goal!”か”Gooal!”がパターンに一致 |
グループ化を「 ( ) 」で表すパターン |
---|
たまご(トロ)+ッ! “たまごトロッ!”や”たまごトロトロトロッ!”などがパターンに一致 天気は(晴れ|くもり|雨)です “天気は晴れです”又は”天気はくもりです”又は”天気は雨です”がパターンに一致 |
直前の文字を繰り返す回数を「 { } 」で表すパターン |
---|
so{3} cute! “sooo cute!”がパターンに一致 so{2,} cute! “soo cute!”や”sooo cute!”など o を2回以上繰り返す文字列がパターンに一致 so{2, 5} cute! “soo cute!”や”sooo cute!”など o を2回以上5回以下で繰り返す文字列がパターンに一致 |
指定した文字の何れかの 1 文字を [ ] で表すパターン |
---|
[aiueo] ” a ” 又は ” i ” 又は ” u ” 又は ” e ” 又は ” o ” がパターンに一致 |
範囲内の何れかの 1 文字を [ – ] で表すパターン |
---|
[0-9] 0 から 9 までの数字 [a-zA-Z] 小文字 又は 大文字のアルファベット |
除外文字を [ ^ ] で表すパターン |
---|
[^0-9] 数字以外の文字 |
正規表現のサンプルを挙げてみます。
実際に使用する際には、以下のようにスラッシュ( / )で正規表現を囲んで使用するのが一般的ですが、文字列として扱うため、これをさらに引用符( ‘ や ” )で囲みます。
/^[0-9]{3}-[0-9]{4}$/
/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/
/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/
INTERNOUS,inc. All rights reserved.