Ruby:警告:嵌套重复运算符+和?被替换为' *'

时间:2018-04-05 19:31:27

标签: ruby regex capturing-group

我有以下正则表达式(我从另一个中提取它以重现错误):

test_regex = /(^[A-Z]{2}[, ]+\d{5}(?:-\d{4})?).+/

它匹配州名缩写,邮政编码和一些更随机的字符:

"PA 19020 iuhiu" =~ test_regex
 => 0 

但是我有一个用例可能附加状态和邮政编码:

"PA19020 iuhiu" =~ test_regex
 => nil 

所以我需要考虑到这一点。我的解决方案是使用?可选字符使字符类[]可选。因此,我需要使用()分组运算符对字符类和+一个或多个字符匹配器进行分组。与此同时,我不想把它作为一个群体来捕捉。所以我需要使用:?来确保它是一个非捕获组。我的解决方案:

(?:[, ]+)?

但是当我尝试时,发生了以下情况:

test_regex2 = /(^[A-Z]{2}(?:[, ]+)?\d{5}(?:-\d{4})?).+/
/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/irb/workspace.rb:86: warning: nested repeat operator + and ? was replaced with '*': /(^[A-Z]{2}(?:[, ]+)?\d{5}(?:-\d{4})?).+/
 => /(^[A-Z]{2}(?:[, ]+)?\d{5}(?:-\d{4})?).+/ 

为什么它会给我这个错误?我只是希望所说的字符是可选的而不是捕获的。

0 个答案:

没有答案