【发布时间】:2019-07-08 02:26:26
【问题描述】:
我在 Ruby 中的正则表达式中得到了这个结果。
起初,问题本身并不相同。 这不是同一个问题,因为答案不同。 评论中的讨论也有所作为。
在第一个结果中,在匹配整个 'hello' 之后,它看起来 .* 匹配 nothing。
但是为什么会这样呢?
[53] pry(main)> "hello".gsub(/.*/, "abc")
=> "abcabc"
[54] pry(main)> "hello".gsub(/^.*$/, "abc")
=> "abc"
【问题讨论】:
-
为什么会分成'hel'和'lo'?
-
@JayRizzo
"hello".gsub(/.*/) { puts $&.inspect; "abc" }另有说法。 -
有趣的是,您只需要在开头锚定它即可使其“有意义”:
"hello".gsub(/^.*/, "abc")或"hello".gsub(/\A.*/, "abc")。最后用$、\z或\Z锚定没有任何作用。使用gsub(/.+/)当然会产生预期的结果。大概.*匹配字符串末尾的“无”,因为*表示“零或更多” -
不是答案,但这里有一些数据。在 rubular.com 有一个匹配项,即整个字符串。在 regex101.com,没有选项,只有一个匹配项。添加“全局”
/g选项(“第一次匹配后不返回”)有两个匹配项,一个是“空匹配项”。但是,Ruby 不支持/g。 -
Hidehiro,请参阅@matiska 对this SO quesion 的回答。