好的,我可以在字符串中找到正则表达式匹配,并进行一些捕获。 现在,如果我的字符串有很多匹配怎么办?假设我的代码在字符串中找出括号内的数字。代码将在字符串中找到数字,如
(5)
但是如果字符串是
怎么办?(5)(6)(7)
我需要一种方法来迭代这三个元素。我见过教程,但他们似乎只讨论一次性比赛......
答案 0 :(得分:30)
如果我理解正确,您可以使用String#scan
方法。请参阅文档here。
答案 1 :(得分:1)
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"]