1

我有一个变量 $message ,当我打印时会产生。

 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;
  }
4

1 回答 1

2

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

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

这个想法是避免点。

注意事项:

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

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

于 2013-06-27T00:09:55.553 回答