我有一些字符串,我想模式匹配,然後提取出的匹配,而變量$ 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