regular - ruby regex replace




匹配正則表達式的所有出現次數 (2)

如果你有一個組的正則表達式:

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

您使用字符串方法的掃描來查找匹配的組:

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

要找到匹配的模式:

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

有沒有一種快速的方法來找到Ruby中的正則表達式的每一個匹配? 我查看了Ruby STL中的Regex對象,並在Google上搜索無濟於事。


為找到所有匹配的字符串,請使用String類的scan方法。

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

如果您希望MatchData是由Regexp類的match方法返回的對象的類型,請使用以下內容

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]

如果您想了解更多信息,請參閱這些問題
如何獲取字符串中所有Ruby正則表達式的匹配數據?
具有命名捕獲支持的Ruby正則表達式匹配枚舉器
如何找出紅寶石每場比賽的起點

閱讀關於ruby中的特殊變量$&$'$1$2將會非常有幫助。





regex