迭代每个"匹配"(Ruby regex)

Vol*_*ort 23 ruby regex

好的,我可以在字符串中找到正则表达式匹配,并进行一些捕获.现在,如果我的字符串有很多匹配怎么办?假设我的代码在字符串中找出括号内的数字.代码会在字符串中找到数字

(5)

但是如果字符串是什么呢

(5)(6)(7)

我需要一种方法来迭代这三个元素.我见过教程,但他们似乎只谈一次性比赛......

dee*_*see 31

如果我理解正确,您可以使用该String#scan方法.见文档这里.


Chr*_*bek 8

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

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

您可以使用正向向后查找 ( ?<=) 和向前查找 ( ?=) 从结果中排除括号:

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

如果您不将块传递给scan,它将返回一个包含所有匹配项的数组:

"(5) (6) (7)".scan(/(?<=[(])\d+(?=\))/)
=> ["5", "6", "7"]
Run Code Online (Sandbox Code Playgroud)