有没有快速找到Ruby中正则表达式匹配的方法?我查看了Ruby STL中的Regex对象,并在Google上搜索无济于事.
使用scan
应该做的诀窍:
string.scan(/regex/)
要查找所有匹配的字符串,请使用类的scan
方法String
.
str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und" str.scan(/\d+/) #=> ["54", "3", "1", "7", "3", "36", "0"]
如果您更希望MatchData
哪个类是返回的对象的类型,类的match
方法Regexp
,请使用以下内容
str.to_enum(:scan, /\d+/).map { Regexp.last_match } #=> [#, # , # , # , # , # , # ]
拥有的好处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
在红宝石将是超级有用.
如果你有一个组的正则表达式:
str="A 54mpl3 string w1th 7 numbers scatter3r ar0und" re=/(\d+)[m-t]/
您可以使用scan of string方法查找匹配的组:
str.scan re #> [["54"], ["1"], ["3"]]
要找到匹配的模式:
str.to_enum(:scan,re).map {$&} #> ["54m", "1t", "3r"]