2012-07-22 45 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