我曾认为我了解 Ruby 中的 scan
:它只是执行单次匹配,然后重复此过程以获取所有结果并将其放入数组中?
ruby-1.9.2-p0 > "hello world".scan(/\w{2}/)
=> ["he", "ll", "wo", "rl"]
ruby-1.9.2-p0 > "hello world".scan(/(\w){2}/)
=> [["e"], ["l"], ["o"], ["l"]]
为什么第二行会得到那个结果,如何使其返回与第一行相同的结果?(因为有时我们必须在正则表达式中添加 ()
。)
作为一个约定,以下两种写法是等价的:
ruby-1.9.2-p0 > "hello world"[/\w{2}/]
=> "he"
ruby-1.9.2-p0 > "hello world"[/(\w){2}/]
=> "he"
?:
不会创建一个组吗?这只是 Ruby 特有的吗?有没有更简单的解决方案...比如其他方法,或者"hello world"[/\w{2}/g]
... 或者"hello world".scan(/(\w){2}/, :top_level)
...一些更简单的形式。 - nonopolarity(?:...)
在许多现代正则表达式引擎中被发现。至于可能更简单的解决方案,我不了解足够的 Ruby 以便给出任何建议。 - Ignacio Vazquez-Abrams( )
内容... 因此它忽略了顶层匹配并使用了被匹配两次的( )
并使用了第二个。 - nonopolarityscan
在正则表达式中的行为显然会与没有组时有所不同。谢谢! - Tim Pietzcker