Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl可选?停止变量捕获_Regex_Perl - Fatal编程技术网

Regex Perl可选?停止变量捕获

Regex Perl可选?停止变量捕获,regex,perl,Regex,Perl,这是密码 my $regex = '^.*?"blocked"\s+:\s+true.*?"clientip"\s+:\s+"([^"]*)".*?"containsadverts" : false.*?"destdomain" :\s+"([^"]*).*?("username" :\s+{ ")?([^"]*)?.*$'; 与其匹配的字符串(相当大)有时会有: "username" : { "John" : [ ] } } 有时不是。当需要的时候,我需要抓取名字,这将是4美元(在这个例

这是密码

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”不存在时,正则表达式失败。我在想,
正在做一些我不太理解的事情,也许?

您可以使用模块,因为正则表达式不适合此工作。

该错误不是来自该行代码。事实上这是不可能的,因为单引号字符串不插值变量。当然,这不是正则表达式,而是字符串。尽管它是单引号,但它的行为不会像正则表达式一样,并且可能会导致难以发现的bug。您应该使用
qr()
来存储正则表达式。当然,正如mpapec所说,如果这是JSON,你应该使用JSON模块来解析它,绝对不要使用正则表达式;所以我不能用传统的正则表达式来做这件事,那没问题,这不是一个不能的问题。这更像是一个用艰难而不可靠的方式做事的问题,还是用简单而安全的方式做事的问题。