正規表現メタ文字まとめ

メタ文字一覧

メタ文字意味文字列 / 正規表現 => マッチする箇所
.任意の1文字hello / h.llo => hello
\w単語を構成する文字hello / h\wllo => hello
\W単語を構成しない文字hello! / hello\W => hello!
\s空白文字(改行,タブ文字..含む)I am / I\sam => I am
\S空白文字以外I'm / I\Sm => I'm
\d数字5年 / \d年 => 5年
\D数字以外5年 / 5\D => 5年
0回以上の繰り返しhello / helo => hello
+1回以上の繰り返しhello / hel+o => hello
{n}n回の繰り返しhello / hel{2}o => hello
{n,}n回以上の繰り返しhello / hel{2,}o => hello
{n,m}n回以上m回以下の繰り返しheyyyyy / hey{2,5} => heyyyyy
?0回または1回の出現hello / he?llo => hello
^文字列の先頭hello / ^hello => hello
$文字列の末尾hello / hello$ => hello
\b単語の境界good day / \bday\b => day
\B単語の境界以外hello / \Bello\B => ello
[]指定した文字赤色 / [赤青黄]色 => 赤色
[^]指定した文字以外白色 / [^赤青黄]色 => 白色
[-]指定した文字の範囲内の文字あい / [あ-お][あ-お] => あい
[^-]指定した文字の範囲外の文字イカ / [^あ-お][^あ-お] => イカ
|指定した文字のいづれ赤 / 赤|青|黄 => 赤
()正規表現をグループ化赤色が好き / (赤|青)色が好き =>
赤色が好き
メタ文字一覧


最長マッチ/最短マッチ

例えば、*は0回以上の無制限の繰り返しにマッチする量指定子だが、無制限とは、対象とした文字列の一番最後までを表す。これを最長マッチという。

e.g
"こんにちは"というと、"こんばんは"と返ってきた
上のダブルクォートに囲まれた文字列にマッチさせたい場合、
".*" だと最長マッチにより、「"こんにちは"というと、"こんばんは"」 がマッチする。

"こんにちは" / "こんばんは"にマッチさせたい場合、?をつける。".*?"

?は最長マッチとは逆に、最小限に狭い範囲でマッチしようとする性質がある。これを最短マッチという。

他に、最長マッチ(とそれに対応する最短マッチ)を表す量指定子は↓の通り。

最長マッチ最短マッチ
?
++?
???
{n}{n}?
{n,}{n,}?
{n,m}{n,m}?


キャプチャ

()を使うと、カッコ内の文字列を記憶し 、\1 で参照することができる。これをキャプチャという。


e.g. キャプチャ1回
(\w) is \1 という正規表現があると、A is A、Tom is Tom、のような文字列がマッチする。

e.g. キャプチャ2回
<(\w+)><(\w+)>.*</\2><\1>という正規表現は、 <div><p>hello</p></div> などがマッチする。\1, \2がどのキャプチャを参照するかは、()の順番によって決まる。左から数えて最初の()\1、次の()\2となる。