メタ文字一覧
メタ文字 | 意味 | 文字列 / 正規表現 => マッチする箇所 |
. | 任意の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 / hel*o => 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
となる。