匹配所有的正则expression式

有没有一种快速的方法来findRuby中的正则expression式的每一个匹配? 我查看了Ruby STL中的Regex对象,并在Google上search无济于事。

使用scan应该做的伎俩:

 string.scan(/regex/) 

为了find所有匹配的string,使用String类的scan方法。

 str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und" str.scan(/\d+/) #=> ["54", "3", "1", "7", "3", "36", "0"] 

如果您想让MatchData返回的对象的typesmatch Regexp类的方法,请使用以下代码

 str.to_enum(:scan, /\d+/).map { Regexp.last_match } #=> [#<MatchData "54">, #<MatchData "3">, #<MatchData "1">, #<MatchData "7">, #<MatchData "3">, #<MatchData "36">, #<MatchData "0">] 

拥有MatchData的好处是你可以使用像offset这样的方法

 match_datas = str.to_enum(:scan, /\d+/).map { Regexp.last_match } match_datas[0].offset(0) #=> [2, 4] match_datas[1].offset(0) #=> [7, 8] 

如果您想了解更多信息,请参阅这些问题
如何获得string中所有出现的Ruby正则expression式的匹配数据?
Ruby正则expression式匹配具有命名捕获支持的枚举器
如何找出每个ruby比赛的起点

在ruby中读取特殊variables$&$'$1$2将会非常有帮助。

如果你有一个组的正则expression式:

 str="A 54mpl3 string w1th 7 numbers scatter3r ar0und" re=/(\d+)[mt]/ 

您使用扫描的string方法来查找匹配的组:

 str.scan re #> [["54"], ["1"], ["3"]] 

要find匹配的模式:

 str.to_enum(:scan,re).map {$&} #> ["54m", "1t", "3r"]