Ruby正则表达式匹配子表达式的括号

时间:2012-07-22 21:07:42

标签: ruby regex parentheses

我正在尝试使用ruby脚本解析一些代码,在某些时候我想通过使用match将String分隔成子串:

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(")",""),但我不认为这是最好的方式,我想知道为什么第一个表达式是错误的。提前谢谢。

1 个答案:

答案 0 :(得分:0)

该错误仅表示没有匹配。也许如果你在运行正则表达式之前打印出nombre,你可能会发现正则表达式与字符串不匹配的原因。