正規表現
Rubyの勉強
マニュアルを見ながら今まで使ったことのない正規表現を試す。
なんか難しいぞ!
後方参照
p "abcdef" =~ /(...)/ # => 0 p "abcdef" =~ /(...)\1/ # => nil \1は'abc' p "abcabc" =~ /(...)\1/ # => 0
(?: ) 後方参照を伴わないグループ化
"abcdef" =~ /(?:...)(...)/ p $1 # => def "abcdef" =~ /(...)(...)/ p $1 # => abc
(?=re1)re2 re1,re2両方にマッチ
p "abcdef" =~ /(?=a.*f).{6}/ # => 0 p "abcdef" =~ /(?=a.*c).{6}/ # => 0 マッチの範囲は異なっても良い? p "abcdef" =~ /(?=b.*f).{6}/ # => nil マッチ開始位置が異なればダメ? p "abcdef" =~ /(?=b.*f).{5}/ # => 1 p "abcdef" =~ /(?=a.*g).{6}/ # => nil p "abcdef" =~ /(?=.{6})a.*c/ # => 0 マッチの範囲は異なっても良い? p "abcdef" =~ /(?=.{6})b.*f/ # => nil マッチ開始位置が異なればダメ?
re1(?=re2) re1の後にre2が続くre1にマッチ
p "abcdef" =~ /a.*(?=.*f)/ # => 0 p $& # => abcde 'f'が含まれない p "abcdef" =~ /a.*(?=.{6})/ # => nil
(?!re1)re2 re1にマッチせずre2にマッチ
p "abcdef" =~ /(?!.{5})a.*f/ # => nil p "abcdef" =~ /(?!.{3})d.*f/ # => nil p "abcdef" =~ /(?!abc)d.*f/ # => 3