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

时间:2014-07-15 07:48:20

标签: ruby

这是我的字符串...

[foo-1 param1 : value1, param2 : value2]
[foo-2 param1 : value1, param2 : value2, params3 : value3]
...

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

之间的所有序列
/\[([\w-]+)\s?([\w@.,:\s]*)\]/m

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

/([\w]+)\s?,?:\s?,?([\w@.-]+)/m

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

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">

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

1 个答案:

答案 0 :(得分:5)

那是因为您使用的是Regexp#match。那只匹配一次。如果您想要多个匹配项,请使用String#scan