Perl简单的正则表达式令人难以置信

时间:2013-06-26 23:41:23

标签: regex perl pattern-matching match

我有一个变量$消息,当我打印产生时。

 Date:   Wed Jun 26 18:15:11

some message test

[tug=123
    [rug testing one]


the boy fell on the rug

#update]

文本可能会改变,但此格式保持不变

(random characters)  [tug=(possible number)   
  [(possible text1)] (sometext2) #(possible text3)]

我如何抓取(可能的数字),(可能的text1),(sometext2)和(可能的text3)

我尝试了至少抓住一些东西的东西,但没有雪茄就失败了

 if( $message =~ /.*\[tug\s*\[(.*)\]/g){
    my $grab = $1;
  }

1 个答案:

答案 0 :(得分:2)

您可以使用此模式提取数据:

$str =~ /^(?>[^[]++|\[(?!tug=))+\[tug=(\d*+)\s*+\[([^]]*+)]\s*+([^#]+?)\s*+#([^]]*+)]$/;
print "\n".$1."\n".$2."\n".$3."\n".$4;

我们的想法是避免使用点。

通知:

我在这里假设当没有可能的text1 时,仍有方括号。

我选择在 sometext2 之后删除白色字符,这就是我使用惰性量词(+?)的原因。如果您想保留它们,只需将([^#]+?)\s*+替换为([^#]++)