2012-07-22 81 views
0

我試圖解析一些代碼,使紅寶石腳本,在某些時候我想用匹配字符串分隔成子:紅寶石正則表達式匹配括號中的子表達式

frase = "EXTREM(TIME2,FRE,NFRE,SDV,DEL,RMG)" 

frase.match(/(\w*)\((.*)\)/) 
=> #<MatchData "EXTREM(TIME2,FRE,NFRE,SDV,DEL,RMG)" 1:"EXTREM" 2:"TIME2,FRE,NFRE,SDV,DEL,RMG"> 

它按預期工作的IRB ,但是當我把這個腳本文件(一個函數調用PROCESA內):

tmpo = extra.match(/(\w*)\s*\((.*)\)/) 
puts "#{nombre} calls #{tmpo[1]} with #{tmpo[2]}" 

我得到這個錯誤:

`block in procesa': undefined method `[]' for nil:NilClass (NoMethodError) 
from f2f90.rb:141:in `each_index' 
from f2f90.rb:141:in `procesa' 
from f2f90.rb:166:in `block in <main>' 
from f2f90.rb:166:in `each' 
from f2f90.rb:166:in `<main>' 

我搜索了這個網站和谷歌沒有運氣,我錯過了什麼嗎?,我最終把extra.match(/(\w*)\s*(.*)/)tmpo[2].sub("(","").sub(")",""),而不是我想它是做這件事的最好方式,我想知道爲什麼第一個表達式是錯的。提前致謝。

回答

0

該錯誤僅僅意味着沒有匹配。也許如果你在運行正則表達式之前打印​​,你可能會看到正則表達式與字符串不匹配的原因。

+0

非常感謝:)這是一些意想不到的輸入,但是'nombre'與它無關,它與匹配無關。 – 2012-07-22 22:03:00

+0

糟糕,我的意思是「額外」。樂意效勞! :) – 2012-07-22 22:18:19