在其他语言regexp中,您可以使用// g进行全局匹配。
然而,在Ruby中:
"hello hello".match /(hello)/
仅捕获一个问候
如何捕获所有问候?
答案 0 :(得分:67)
您可以使用扫描方法。 scan方法将为您提供所有匹配的数组,或者如果您传递一个块,则将每个匹配传递给该块。
"hello1 hello2".scan(/(hello\d+)/) # => [["hello1"], ["hello2"]]
"hello1 hello2".scan(/(hello\d+)/).each do|m|
puts m
end
我已经写过关于此方法的文章,您可以在文章末尾阅读here。
答案 1 :(得分:12)
使用String#scan
。它将返回每个匹配的数组,或者您可以传递一个块,并且每次匹配都会调用它。
答案 2 :(得分:8)
以下是寻找替换所有正则表达式匹配的方法的人的提示。
而不是像许多其他语言一样的// g标志和一种替换方法,而是使用两种不同的方法。
# .sub — Replace the first
"ABABA".sub(/B/, '') # AABA
# .gsub — Replace all
"ABABA".gsub(/B/, '') # AAA