需要所有正则表达式匹配,而不仅仅是第一个

Hit*_*ito 1 ruby

这是我的字符串......

[foo-1 param1 : value1, param2 : value2]
[foo-2 param1 : value1, param2 : value2, params3 : value3]
...
Run Code Online (Sandbox Code Playgroud)

我的目的是首先获得[]之间的所有序列,然后解析所有参数.我写了2个正则表达式,第一个应该得到[]之间的所有序列:

/\[([\w-]+)\s?([\w@.,:\s]*)\]/m
Run Code Online (Sandbox Code Playgroud)

第二个正则表达式应该解析我的所有参数

/([\w]+)\s?,?:\s?,?([\w@.-]+)/m
Run Code Online (Sandbox Code Playgroud)

我的问题是我总是得到第一场比赛,但我想得到所有的比赛.我试着这样做:

r = /\[([\w-]+)\s?([\w@.,:\s]*)\]/m
str = "[foo-1 param1 : value1, param2 : value2]
[foo-2 param1 : value1, param2 : value2, params3 : value3]"

m = r.match(str)

# #<MatchData "[foo-1 param1 : value1, param2 : value2]" 1:"foo-1" 2:"param1 : value1, param2 : value2">
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解释为什么我的正则表达式只有第一场比赛即使有更多的比赛?我在rubular上测试它(这里:http://www.rubular.com/r/nTVE6M5om5 )似乎它有效.

saw*_*awa 5

那是因为你正在使用Regexp#match.那只匹配一次.如果您想要多个匹配,请使用String#scan.