Ruby全局匹配正则expression式?

在其他语言的正则expression式中,您可以使用// g进行全局匹配。

但是,在Ruby中:

"hello hello".match /(hello)/ 

只捕获一个你好

我如何捕获所有你好?

您可以使用扫描方法。 扫描方法将给你一个所有匹配的数组,或者,如果你传递一个块,将每个匹配传递给块。

 "hello1 hello2".scan(/(hello\d+)/) # => [["hello1"], ["hello2"]] "hello1 hello2".scan(/(hello\d+)/).each do|m| puts m end 

我已经写了关于这个方法,你可以在这篇文章的最后附近阅读。

使用String#scan 。 它将返回每个匹配的数组,或者您可以传递一个块,每个匹配都会被调用。

所有的细节在http://ruby-doc.org/core/classes/String.html#M000812

这里有一个小贴士,任何人想找一种方法来replace所有正则expression式匹配的东西。

Ruby不像其他许多语言那样使用g标志和replace方法,而是使用两种不同的方法。

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