我有一些字符串,我想模式匹配,然后提取出的匹配,而变量$ 1,$ 2,等如何从Ruby正则表达式提取可变数量的子匹配?
模式匹配的代码,我是
a = /^([\+|\-]?[1-9]?)([C|P])(?:([\+|\-][1-9]?)([C|P]))*$/i.match(field)
提出result = #{a.to_a.inspect}
利用上述我能够容易地匹配以下样品字符串:
“C”, “+ 2C”, “2C-P”, “2C-3P”, “P + C”
我已经在Rubular网站上确认了所有这些工作。
然而,当我尝试匹配“+ 2P-C-3P”,但是,由于它匹配,MatchData“类似数组的对象”是这样的:
result = ["+2P-C-3P", "+2", "P", "-3", "P"]
的问题是,我不能提取到数组中,中间模式“-C”。
我希望看到的是:
result = ["+2P-C-3P", "+2", "P", "-", "C", "-3", "P"]
它似乎只提取部“-3P”为“-3”和“P”
有谁知道我可以修改我的模式来捕捉中间的比赛?
因此,作为一个其他例子,+ 3C + 2P-C-4P,我希望应该创建:
["+3c+2p-c-4p", "+3", "C", "+2", "P", "-", "C", "-4", "P"]
但我得到的是
["+3c+2p-c-4p", "+3", "C", "-4", "P"]
它完全忽略了中间环节。
我删除了我的答案,因为我看到它不是很正确。我会在几分钟后处理并重新发布。 – ubiquibacon 2010-10-03 08:02:28
谢谢。我试过了,没有,抱歉没有奏效。 – 2010-10-03 08:03:34