この章では、Rubyにおける正規表現の扱いが記載されています。
この章の前に、著者の @jnchito さんの正規表現に関するQiita記事を参考にすると、とても理解しやすいと思います。
この記事では、特に参考になった部分を抜粋します。
Rubyにおける正規表現と文字列の比較
=~
を扱う。
正規表現と文字列がマッチした場合は、文字列のマッチした位置が返る(真)。
マッチしなかった場合はnilが返る(偽)。
'123-4567' =~ /\d{3}-\d{4}/
#=> 0
'99-999' =~ /\d{3}-\d{4}/
#=> nil
正規表現のキャプチャ
正規表現では()
を扱うことで、マッチした文字列をキャプチャする事ができる。
Rubyの場合では、この機能を扱う際にmatchメソッドを用いて、マッチした結果を配列のように扱う事ができる。
text = "私の誕生日は1997年5月27日です。"
m=/(\d+)年(\d+)月(\d+)日/.match(text)
m #=> <MatchData "1997年5月27日" 1:"1997" 2:"5" 3:"27">
m[0] #=> "1997年5月27日"
m[1] #=> "1977"
m[2] #=> "7"
m[3] #=> "17"
m[1..3] #=> ["1997", "5", "27"]
キャプチャ結果に名前をつける
キャプチャには(?)というメタ文字を使って名前を付けることができます。
(?<year>\d+)年(?<month>\d+)月(?<day>\d+)日
text = "私の誕生日は1997年5月27日です。"
m=/(?<year>\d+)年(?<month>\d+)月(?<day>\d+)日/.match(text)
#=> #<MatchData "1997年5月27日" year:"1997" month:"5" day:"27">
m[:year] #=> "1997"
m["year"] #=> "1997"
m[1] #=> "1977"