关于正则表达式:Perl Bash中的一个衬板:打印来自复杂正则表达式的匹配项

Perl oneliner in bash: print matches from complex regexp

我有这个复杂的正则表达式

1
/"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\\/]+)",/

,我需要解析一个文件(全部放在一行上),并仅输出匹配的组,例如

1
print $1 $2 $3

目前唯一可以使用的在线服务是

1
2
perl -pe 'while(m/"_outV":([0-9]+)\\,"_inV":([0-9]+)\\,"_label":"([a-z\\/]+)"\\,/g){print"$1 $2 $3\
";}'

但是在匹配之后,它最终还会在结尾处回显整个文件。
我该如何解决?

我虽然删除-p选项可以解决问题,但事实并非如此。


对我很好。
您需要将-p替换为-n,这就是原因。

一些要点:

  • 无需反斜线那些,"
  • 您可以方便地将[0-9]替换为\\d
  • 通过对正则表达式使用其他定界符,您将不需要转义/

优化最终结果

1
2
perl -ne 'print"$1 $2 $3\
" while m{"_outV":(\\d+),"_inV":(\\d+),"_label":"([a-z/]+)",}g'