Perl可选吗?停止变量捕获

时间:2013-11-20 13:53:49

标签: regex perl

这是代码

my $regex = '^.*?"blocked"\s+:\s+true.*?"clientip"\s+:\s+"([^"]*)".*?"containsadverts" : false.*?"destdomain" :\s+"([^"]*).*?("username" :\s+{ ")?([^"]*)?.*$';

它的匹配有时具有的(相当大的)字符串:

"username" : { "John" : [  ] } }

有时没有。什么时候我需要获取4美元的名称(在这种情况下是约翰)。 我的想法是创建两个捕获组然后添加?在每一个结束时,使它们可选。

这导致:

Use of uninitialized value $3 in concatenation (.) or string at perl_regex.pl line 13.

当我在每次捕获结束时删除?它将捕获变量ok,但当“username”不存在时正则表达式失败。我在想?正在做一些我不太了解的事情?

1 个答案:

答案 0 :(得分:3)

你可以使用JSON模块,因为正则表达式不适合这项工作。

相关问题