为什么不正则expression式(?<=fo).*匹配foo (而(?<=f).* )? "foo" =~ /(?<=f).*/m => 1 "foo" =~ /(?<=fo).*/m => nil 这似乎只发生在单线模式打开(点匹配换行); 没有它,一切都OK: "foo" =~ /(?<=f).*/ => 1 "foo" =~ /(?<=fo).*/ => 2 testingRuby 1.9.3和2.0.0。 在Rubular上看到它 编辑:更多观察: 添加一个行尾锚点不会改变任何东西: "foo" =~ /(?<=fo).*$/m => nil 但是与一个懒惰的量词一起,它“起作用”: "foo" =~ /(?<=fo).*?$/m => 2 编辑:还有一些观察: .+与其等同的{1,} , 但只在Ruby 1.9中 (似乎这是这种情况下两者之间唯一的行为差异): "foo" =~ /(?<=fo).+/m => 2 "foo" =~ /(?<=fo).{1,}/ […]