为什么这个(死的简单)ruby正则表达式就像这样?

时间:2015-03-10 12:14:49

标签: ruby regex

为什么"whatever".gsub(/.*/, "bien")输出" bienbien"而不只是" bien"?

我完全迷失在这里:S任何人都可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

你可以看到使用一个块发生了什么:

>> 'foo'.sub(/.*/) { |m| p m; 'bar' }
"foo"
=> "bar"
>> 'foo'.gsub(/.*/) { |m| p m; 'bar' }
"foo"
""
=> "barbar"
>> 'foo'.gsub(/^.*/) { |m| p m; 'bar' }
"foo"
=> "bar"
>> 'foo'.gsub(/^.*$/) { |m| p m; 'bar' }
"foo"
=> "bar"
>> 'foo'.gsub(/.*$/) { |m| p m; 'bar' }
"foo"
""
=> "barbar"
>> 'foo'.gsub(/.+/) { |m| p m; 'bar' }
"foo"
=> "bar"

换句话说,gsub将继续匹配,并在最后一行匹配一个空字符串。 (这可以说是一个错误。)