遍历每个“匹配项”(Ruby正则表达式)

29

好的,我能够在一个字符串中找到 Regex 匹配,并且进行一些捕获。那么如果我的字符串有多个匹配呢?比如说我的代码要在字符串中找到括号里面的数字。那么它会在如下的字符串中找到数字:

(5)

但是如果字符串是这样的呢:

(5) (6) (7)

我需要一种方法来迭代处理这三个元素。我看过一些教程,但它们似乎只讲述了一次性匹配...

2个回答

35
如果我理解正确,您可以使用String#scan方法。请参阅此处的文档。

7

String#scan 可以用来查找给定正则表达式的所有匹配项:

"(5) (6) (7)".scan(/\(\d+\)/) { |match| puts "Found: #{match}" }
# Prints:
Found: (5)
Found: (6)
Found: (7)

您可以使用正向后瞻 (?<=) 和正向前瞻 (?=) 来排除结果中的括号:

"(5) (6) (7)".scan(/(?<=[(])\d+(?=\))/) { |match| puts "Found: #{match}" }
# Prints:
Found: 5
Found: 6
Found: 7

如果您没有向scan传递一个块,则它将返回一个包含所有匹配项的数组:
"(5) (6) (7)".scan(/(?<=[(])\d+(?=\))/)
=> ["5", "6", "7"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接