我使用嵌套括号来解决这个正则表达式问题。
$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
最后两次捕获。有趣的是,当我删除?并删除了可选条款,它工作正常,但是当我不想要一个时,我得到一个正则表达式不匹配。
对此有什么想法吗?
答案 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 )