Ruby全局匹配regexp?

时间:2010-08-28 00:32:38

标签: ruby regex

在其他语言regexp中,您可以使用// g进行全局匹配。

然而,在Ruby中:

"hello hello".match /(hello)/

仅捕获一个问候

如何捕获所有问候?

3 个答案:

答案 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。它将返回每个匹配的数组,或者您可以传递一个块,并且每次匹配都会调用它。

http://ruby-doc.org/core/classes/String.html#M000812

的所有详细信息

答案 2 :(得分:8)

以下是寻找替换所有正则表达式匹配的方法的人的提示。

而不是像许多其他语言一样的// g标志和一种替换方法,而是使用两种不同的方法。

# .sub — Replace the first
"ABABA".sub(/B/, '') # AABA

# .gsub — Replace all
"ABABA".gsub(/B/, '') # AAA