我有一个变量$消息,当我打印产生时。
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;
}
答案 0 :(得分:2)
您可以使用此模式提取数据:
$str =~ /^(?>[^[]++|\[(?!tug=))+\[tug=(\d*+)\s*+\[([^]]*+)]\s*+([^#]+?)\s*+#([^]]*+)]$/;
print "\n".$1."\n".$2."\n".$3."\n".$4;
我们的想法是避免使用点。
通知:
我在这里假设当没有可能的text1 时,仍有方括号。
我选择在 sometext2 之后删除白色字符,这就是我使用惰性量词(+?
)的原因。如果您想保留它们,只需将([^#]+?)\s*+
替换为([^#]++)