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
。 它将返回每个匹配的数组,或者您可以传递一个块,每个匹配都会被调用。
这里有一个小贴士,任何人想找一种方法来replace所有正则expression式匹配的东西。
Ruby不像其他许多语言那样使用g标志和replace方法,而是使用两种不同的方法。
# .sub — Replace the first "ABABA".sub(/B/, '') # AABA # .gsub — Replace all "ABABA".gsub(/B/, '') # AAA