bash中的Perl-oneliner:打印复杂regexp中的匹配项

bash中的Perl-oneliner:打印复杂regexp中的匹配项,regex,bash,perl,Regex,Bash,Perl,我有一个复杂的正则表达式 /"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\/]+)",/ 我需要解析一个文件(都在一行上),然后只输出匹配的组,如 print $1 $2 $3 目前,唯一几乎可以正常工作的在线用户是 perl -pe 'while(m/"_outV":([0-9]+)\,"_inV":([0-9]+)\,"_label":"([a-z\/]+)\"\,/g){print "$1 $2 $3\n";}' 但在比赛结束后,

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

/"_outV":([0-9]+),"_inV":([0-9]+),"_label":"([a-z\/]+)",/
我需要解析一个文件(都在一行上),然后只输出匹配的组,如

print $1 $2 $3
目前,唯一几乎可以正常工作的在线用户是

perl -pe 'while(m/"_outV":([0-9]+)\,"_inV":([0-9]+)\,"_label":"([a-z\/]+)\"\,/g){print "$1 $2 $3\n";}' 
但在比赛结束后,它最终也会回显整个文件。 我该如何解决这个问题

我原以为删除
-p
选项会成功,但事实并非如此。

看起来不错。 您需要将
-p
替换为
-n

还有几个更为精细的要点:

  • 那些
    无需反斜杠
  • 您可以方便地将
    [0-9]
    替换为
    \d
  • 通过对正则表达式使用不同的分隔符,您不需要转义
    /
最终结果优化

perl -ne 'print "$1 $2 $3\n" while m{"_outV":(\d+),"_inV":(\d+),"_label":"([a-z/]+)",}g'
我觉得不错。 您需要将
-p
替换为
-n

还有几个更为精细的要点:

  • 那些
    无需反斜杠
  • 您可以方便地将
    [0-9]
    替换为
    \d
  • 通过对正则表达式使用不同的分隔符,您不需要转义
    /
最终结果优化

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

一些示例数据会有所帮助。看起来你有东西要解析,你正试图用正则表达式破解它,这可能是错误的解决方法。我开始写答案,但我现在必须走了。我的意图是说,你不应该在任何语言中追求一行程序。两个级别的转义使调试变得非常困难。除非您有充分的理由需要一个单行命令,而且我想不出一个有效的命令,否则最好将它作为Perl程序编写在单独的文件中。除了简单的正则表达式模式之外,任何东西都应该使用更改分隔符和使用
/x
修饰符的选项。复杂的一行程序适用于喜欢玩“把戏”的年轻程序员;它们不是用于专业用途,@Borodin这并不复杂。@123:复杂是相对的。OP说“我有一个复杂的正则表达式”,所以对他们来说是复杂的,否则的话就太无礼了。@Borodin当然,如果不完全忽略一行代码来解决一些琐碎的问题,我会成为一个
年轻的程序员
。我绝对不同意“最琐碎的”正则表达式模式很难逃脱,唯一有问题的部分是使用单引号,而OP不是。底线是OP唯一的问题是他们没有检查他们使用的标志是什么,所以我怀疑他们手动读取和写入文件会更容易。写一行不会自动使它们无法阅读。。。过于复杂化简单的一次性脚本也是无利可图的。一些示例数据会有所帮助。看起来你有东西要解析,你正试图用正则表达式破解它,这可能是错误的解决方法。我开始写答案,但我现在必须走了。我的意图是说,你不应该在任何语言中追求一行程序。两个级别的转义使调试变得非常困难。除非您有充分的理由需要一个单行命令,而且我想不出一个有效的命令,否则最好将它作为Perl程序编写在单独的文件中。除了简单的正则表达式模式之外,任何东西都应该使用更改分隔符和使用
/x
修饰符的选项。复杂的一行程序适用于喜欢玩“把戏”的年轻程序员;它们不是用于专业用途,@Borodin这并不复杂。@123:复杂是相对的。OP说“我有一个复杂的正则表达式”,所以对他们来说是复杂的,否则的话就太无礼了。@Borodin当然,如果不完全忽略一行代码来解决一些琐碎的问题,我会成为一个
年轻的程序员
。我绝对不同意“最琐碎的”正则表达式模式很难逃脱,唯一有问题的部分是使用单引号,而OP不是。底线是OP唯一的问题是他们没有检查他们使用的标志是什么,所以我怀疑他们手动读取和写入文件会更容易。写一行不会自动使它们无法阅读。。。过于复杂化简单的一次性脚本也是无利可图的。太棒了,优化效果更好!强制性的但书是
\d
[0-9]
不等同,除非
/a
修饰符在place@Borodin哈!我不知道另一块要读的内容。我永远也不知道为什么有人会听我的。太棒了,而且它的优化效果更好!强制性的但书是
\d
[0-9]
不等同,除非
/a
修饰符在place@Borodin哈!我不知道另一块要读的内容。我永远也不知道为什么有人听我的。