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)
はマッチした文字列を配列にして返す。