这是我的字符串...
[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),它似乎有效。
答案 0 :(得分:5)
那是因为您使用的是Regexp#match
。那只匹配一次。如果您想要多个匹配项,请使用String#scan
。