k-tokitoh

はじめての正規表現

2019-06-02

.

一般的な正規表現

  • .: 任意の 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で表現できる。

正規表現

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