2013-06-26 21 views
1

我有一個變量$消息,當我打印產生。Perl的簡單正則表達式令我驚歎

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)] 

我怎麼能搶(可能數),(可能的文本1),(sometext2)和(可能的文字3)

我嘗試過至少抓住一些東西,但失敗時沒有雪茄

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

數據來自哪裏,因爲它看起來像你有多個換行符字符? – hwnd

回答

2

您可以使用此模式額外ct您的數據:

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

這個想法是爲了避免點。

聲明:

我這裏假設時,有沒有可能 text1的仍有方括號。

我選擇去掉 sometext2之後的白色字符,這就是我使用懶惰量詞(+?)的原因。如果你想保留它們只需要替換([^#]+?)\s*+([^#]++)

+0

是的,我猜這個點是邪惡的呃? –

+0

@YusufAli:不,但我已經選擇使用限制性字符類而不是點來描述性更強。你可以使用s修飾符來處理點,就像depesz所暗示的那樣。 –