はじめての正規表現

一般的な正規表現

  • .: 任意の1文字
  • \には2つの場合がある
    • エスケープする場合:\.とすると、.がメタ文字ではなくてただの文字だよ、と表現する。
    • あとにつづく文字と組み合わせて1つの文字種を表現する場合
      • \d: 数字、\w: 文字、\s: スペース。それぞれ大文字で「それ以外」を表す。
  • 量指定子

    • {3}: 3文字の繰り返し、{3,5}: 3文字以上5文字以下の繰り返し、{3,}: 3文字以上の繰り返し。
    • ?: {0,1}, +: {1,}, *: {0,}
    • 量指定子を用いた場合、デフォルトでは一番長い文字列が結果となる。一番短い文字列を得たい場合は、量指定子の後ろに?をつける。
  • ^: 行頭、$: 行末, \b: 単語の境界

  • (hoge|fuga): hogeまたはfuga
  • 文字クラス([]
    • [abc]: aまたはbまたはc、[^xy]: xとy以外の1文字([の直後に^がくる場合のみ否定の意味になる)、[a-z]: 文字コード上でaからzの範囲にあるどれか1文字
    • 地の正規表現エスケープすべき文字と文字クラス内でエスケープすべき文字は異なるので注意
  • 後方参照
    • 正規表現内で()で括った内容を、同一の正規表現のそれ以降において\1, \2で表現できる。
  • キャプチャ
    • 検索文字列で()で括った内容を、置換文字列において$1, $2で表現できる。

Rubyにおける正規表現

  • String# =~ regexpでマッチすればマッチした文字の位置を整数で返し、マッチしなければnilを返す。
  • String# !~ regexpはマッチしなければtrueを、マッチすればfalseを返す。
  • \Aは文字列の先頭を、\zは文字列の終端を表す。
  • String#scan(regexp)はマッチした文字列を配列にして返す。