(?<=fo).*
正規表現が一致しないのはなぜですかfoo
(一致(?<=f).*
します)?
"foo" =~ /(?<=f).*/m => 1
"foo" =~ /(?<=fo).*/m => nil
これは、シングルラインモードがオンになっている場合にのみ発生するようです(ドットは改行と一致します)。それがなければ、すべてがOKです:
"foo" =~ /(?<=f).*/ => 1
"foo" =~ /(?<=fo).*/ => 2
Ruby1.9.3および2.0.0でテスト済み。
編集:いくつかのより多くの観察:
行末アンカーを追加しても何も変わりません。
"foo" =~ /(?<=fo).*$/m => nil
しかし、怠惰な数量詞と一緒に、それは「機能します」:
"foo" =~ /(?<=fo).*?$/m => 2
編集:そしていくつかのより多くの観察:
.+
同等{1,}
の機能と同じように機能しますが、Ruby 1.9でのみ機能します(このシナリオでは、2つの動作の違いはこれだけのようです)。
"foo" =~ /(?<=fo).+/m => 2
"foo" =~ /(?<=fo).{1,}/ => 2
Ruby 2.0の場合:
"foo" =~ /(?<=fo).+/m => nil
"foo" =~ /(?<=fo).{1,}/m => nil
.{0,}
破壊された(1.9と2.0の両方で):
"foo" =~ /(?<=fo).{0,}/m => nil
しかし{n,m}
、両方で機能します:
"foo" =~ /(?<=fo).{0,1}/m => 2
"foo" =~ /(?<=fo).{0,2}/m => 2
"foo" =~ /(?<=fo).{0,999}/m => 2
"foo" =~ /(?<=fo).{1,999}/m => 2