Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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,如何让perl regexp重复检查整行代码 我的文件(测试)内容如下,所有数据仅在一行中。实际文件要大得多,但所有数据都在一行中 {"abc":"283420","def":"283420"},{"abc":"483420","def":"253420"},{"abc":"283120","def":"284420"} 我想打印以下内容: 283420,283420 483420,253420 283120,284420 我当前的代码: perl -nle 'print "$1,$2"

如何让perl regexp重复检查整行代码

我的文件(测试)内容如下,所有数据仅在一行中。实际文件要大得多,但所有数据都在一行中

{"abc":"283420","def":"283420"},{"abc":"483420","def":"253420"},{"abc":"283120","def":"284420"}
我想打印以下内容:

283420,283420
483420,253420
283120,284420
我当前的代码:

perl -nle 'print "$1,$2"  while( /.*abc\":\"(\d*)\".*def\":\"(\d+)/g)' test
只打印最后一个匹配项

283120,284420
Perl正则表达式是“贪婪的”,这意味着它们试图匹配尽可能多的字符。因此,您的第一个
*
与行中的所有内容匹配,但不包括最后一个
abc
,因此您只能得到最后一个数字。要让量词匹配最少数量的字符,需要在其后面加一个问号

perl -nle 'print "$1,$2"  while( /.*?abc\":\"(\d*)\".*?def\":\"(\d+)/g)' test

正则表达式不是正确的工具,请使用JSON解析器,而不是尝试使用另一个名称代替
test
<代码>测试可能是一个内置的系统,它可能会产生不想要的行为(即使它目前不在您的场景中)。为了安全起见,我有高达2G的文件。你能推荐能做到这一点的JSON解析器吗?我认为perl在这里非常有效,速度非常快。谢谢斯普特尼克的评论很好。这是JSON,所以JSON解析器可能是最好的。