当嵌套在可选括号中时,正则表达式不会捕获变量

时间:2013-11-19 19:18:18

标签: regex perl

我使用嵌套括号来解决这个正则表达式问题。

$regex ='^.*some_stuff\s+"([^"*)".*more_stuff\s+"([^"*)".*(even_more :"([^"]*)")?.*$'

我想要一个带有变量捕获的可选子句(因此嵌套的括号) 罚款1美元和2美元,但我得到错误:

Use of uninitialized vale $3 in concatenation (.) or string at perl_regex.pl
Use of uninitialized vale $4 in concatenation (.) or string at perl_regex.pl

最后两次捕获。有趣的是,当我删除?并删除了可选条款,它工作正常,但是当我不想要一个时,我得到一个正则表达式不匹配。

对此有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第一个[在整个表达式结束前没有匹配的]

以下是细分:

^.*some_stuff\s+. # trivial
"([^"*)"          # double quote, start group, start character class ...
.*more_stuff\s+   # still in character class!
"([^"*)".*(even_more :
"([^"]*)          # end of character class, zero or more, close first group
")?.*$.           # ouch, extra )