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