Regular Expression
正規表現(Regular Expression)とは、文字列中の「パターン」を表現する記述方法です。このパターン記述ができると、パターンに一致する複数の文字列を、シンプルに操作できるようになります。
正規表現によるパターンは「通常の文字(リテラル)」と「メタ文字(特殊な役割を与えられた記号)」を組み合わせて記述します。
abc、12345、日本語 ・・・ など通常の文字列
. ^ $ [ ] * + ? {n,m} | ( )
^九州.*
.*である。$
[0-9]+cm
....は600円
ラーメンは600円。 焼肉定食は600円です。
^緊急
緊急電話, 緊急対策会議
ある。$
・・・である。, ・・がそこにある。
明日は[晴曇雨]です。
明日は晴です。, 明日は曇です。, 明日は雨です。
A[A-Z]CDEFG
AACDEFG, ABCDEFG, ・・・, AZCDEFG
A[^A-Z]CDEFG
A0CDEFG, AnCDEFG, A+CDEFG など
直前の文字がないか、直前の文字が1個以上連続する場合に合致
わー*い
わい, わーーい, わーーーーい
.*なんでもあり・・となります。正規表現の最後に .* が来た場合は、行末まで合致することになります。
上記 * と基本的に同じですが、少なくとも1個は + の直前の文字が必要。
わー+い
わーい, わーーい, わーーーーい
直前の文字がないか1つだけあるという意味です。 これ結構使えます。
わー?い
わい, わーい
090-?1234-?5678
09012345678 , 090-1234-5678 , 090-12345678 , 0901234-5678
OK!{1,6}
OK! OK!! OK!!!!!!
(醤油|味噌|塩|豚骨)ラーメン
醤油ラーメン, 味噌ラーメン, 塩ラーメン, 豚骨ラーメン,
カッコ内のパターンにマッチした文字列を後方参照
今日は(5時|深夜)に帰宅します
今日は5時に帰宅します, 今日は深夜に帰宅します
(じゃ)+ーん
じゃーん, じゃじゃーん, ・・ , じゃじゃじゃじゃーん
正規表現においてメタ文字(特別な意味を持つ記号そのもの)を照合対象とする場合にどうするか・・。そのとき用いられるのがエスケープシーケンスと呼ばれる「\(バックスラッシュ)」を用いた記述です。
メタ文字の直前にバックスラッシュを配置することで、直後のメタ文字を通常の文字として認識させることができます。以下の例では、メタ文字 [ . ] の前にバックスラッシュを書いて [ \. ] と表記することで照合させています。
example\.com
example.com
デリミタ(Delimiter)とは、実際のプログラミング等において、パターンの範囲を明示すべくその両端を囲む半角文字記号のことです。デリミタには / , { }, #, @ など、様々な記号が用いられます。
let pattern = /ab+c/ ;以下のようにして生成することも可能です。
let pattern = new RegExp('ab+c');
/foo bar/ #^[^0-9]$# +php+ %[a-zA-Z0-9_-]%括弧をデリミタを使うことも可能です。 ( )、 { }、[ ] また < > など、開閉括弧がそれぞれ開始デリミタ、終了デリミタとなります。
例えば URL など、パターン内にメタ文字である「 / (スラッシュ)」文字が出現するケースでは、デリミタには「 / 」ではなく、「 # 」 などを使うのがよいでしょう。例えば、/images/sample.jpg は・・
$ptn = '/\/images\/sample.jpg/';
$ptn = '#/images/sample.jpg#';
記述したパターンで、正しく対象を照合できるかチェックできます。