プロを目指す人のためのRuby入門・第6章重要ポイントまとめ

「プロを目指す人のためのRuby入門」の第6章を読み終わりました

個人的に重要と判断したポイントをまとめます。

正規表現と文字列の比較

文字列と正規表現を比較するときには=~がよく使われる

#マッチした場合はマッチした文字列の開始位置が返る(つまり真)
'123-4567' =~ /\d{3}-\d{4}/ #=> 0

#マッチしない場合はnilが返る(つまり偽)
'hello' =~ /\d{3}-\d{4}/ #=> nil

戻り値から真偽を判定できるため、条件分岐でも使われる

if '123-4567' =~ /\d{3}-\d{4}/
  puts 'マッチしました'
else
  puts 'マッチしませんでした'
end

#=> マッチしました

キャプチャ
正規表現をマッチさせるときに、抜き出したい部分を()で指定して抜き出す機能のこと

text = '私の誕生日は1977年7月17日です'
m = /(\d+)年(\d+)月(\d+)日/.match(text)

m[0] #=> "1997年7月17日"
m[1] #=> "1977"
m[2] #=> "7"
m[3] #=> "17"

しかし、上記のままだとキャプチャした値を取得するためには何番目が何の値か覚えていなければならない
そこで、キャプチャした値に名前をつけて値を取得しやすくすることができる

text = '私の誕生日は1977年7月17日です'
m = /(?<year>\d+)年(?<month>\d+)月(?<day>\d+)日/.match(text)

m[:year] #=> "1977"
m[:month] #=> "7"
m[:day] #=> "17"

#文字列での指定もできる
m['year'] #=> '1977'

番号での指定もできる
m[2] #=> "7"


感想

伊藤淳一さんのQuiitaで学習してから本を読みました。
本に書いてある内容は一通り理解つもりですが、実際にマッチする正規表現を作り出すのはなかなか難しいです…!
推薦されているオライリーの「詳説 正規表現第3版」もかなり分厚い本なので、それだけ内容の濃い分野なんだと思って地道にがんばります。
電話番号がばっちり抜け出したの感動しました。早く使いこなせるようになりたい。


正規表現クックブック

正規表現クックブック

初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 - Qiita
Rubular: a Ruby regular expression editor and tester