2014-04-11 59 views
0

我會感謝有關這個問題的任何意見。即使表達式正常,regexp「match」突然返回nil?

我有一個正則表達式,應該從字符串中收集一些數據。 表達如下:

/\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/ 

我使用可以看起來像字符串:

[QUOTE=c|223]ContentText[/QUOTE] 

我用這個代碼片段:

regexp = /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/ 
data = regexp.match(str) 

其中str是字符串獲得:

1: c , 2: 223, 3: ContentText 

match只返回零。如果我通過rubular.com使用相同的字符串運行相同的正則表達式,我會得到我想要的結果。我也嘗試過撥打match的任何方式,但它沒有幫助。

我誤解了match函數嗎?我究竟做錯了什麼?

+1

我沒有得到零運行此使用irb。你如何將字符串分配給str?你使用的是什麼ruby版本? – Christian

+0

運行2.0.0p195,字符串被髮送到我的方法:render_quotes(c.content)。上面的代碼是在該方法中運行的第一件事。 (render_quotes是我的方法的名稱。)我一直在better_errors中檢查它,一切都按順序,除了返回.. – Svennisen

+2

[模式很好](http://rubular.com/r/8zUaTmUMOG)。您提供的簡單示例代碼和數據適用於Ruby v2.1.1。我們需要能夠複製問題來幫助您。 –

回答

0

你能粘貼確切的代碼嗎?您的摘錄未顯示str的分配。你的代碼適用於我:

irb(main):002:0> regexp = /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/ 
=> /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/ 
irb(main):003:0> str = "[QUOTE=c|223]ContentText[/QUOTE]" 
=> "[QUOTE=c|223]ContentText[/QUOTE]" 
irb(main):004:0> data = regexp.match(str) 
=> #<MatchData "[QUOTE=c|223]ContentText[/QUOTE]" 1:"c" 2:"223" 3:"ContentText"> 
irb(main):005:0>