1

给定字符串:

"hello %{one} there %{two} world"

此代码不起作用:

s = "hello %{one} there %{two} world"
r = Regexp.new(/(%{.*?})+/)
m = r.match(s)
m[0] # => "%{one}"
m[1] # => "%{one}" 
m[2] # => nil  # I expected "%{two}"

但是在Rubular上,相同的正则表达式(%{.*?})有效并返回%{one}and %{two}

我究竟做错了什么?

4

3 回答 3

4

使用String#scan方法:

'hello %{one} there %{two} world'.scan(/(%{.*?})/)
# => [["%{one}"], ["%{two}"]]

与非捕获组:

'hello %{one} there %{two} world'.scan(/(?:%{.*?})/)
# => ["%{one}", "%{two}"]

更新实际上,不需要分组。

'hello %{one} there %{two} world'.scan(/%{.*?}/)
# => ["%{one}", "%{two}"]
于 2013-10-19T06:49:00.293 回答
1
'hello %{one} there %{two} world'.scan /%{[^}]*}/
#=> ["%{one}", "%{two}"]
于 2013-10-19T09:20:29.187 回答
0

这是供将来参考的,因为这是 Google 上弹出的第一个问题。

我刚刚遇到了这个问题,我的测试在 Rubular 上工作,但是当我运行我的代码时,他们没有工作。

我正在测试类似的东西/^<regex-goes-here>$/

结果是我针对正则表达式测试的行以回车结尾,\n\r但我没有将它们复制到 Rubular,所以它们当然不匹配。

希望这可以帮助。

于 2017-07-12T22:01:42.393 回答