2013-05-20 68 views
0

我有一個執行正則表達式來查找標記標記(<tag>)的Perl腳本。Perl行結束正則表達式

我的正則表達式是:<tag([^>]+)>

這適用於大多數intances,但是,我發現它不工作的實例。

如果<tag>有以下形成....

<tag 
attr="12345"> 

正則表達式工作正常。

但是,如果<tag>看起來像這樣。

<tag attr="12345" 
> 

無匹配。我測試過我的正則表達式是Notepad ++,它對所有實例都能正常工作。問題出在我的Perl腳本中。

我已經嘗試了幾個結束線錨,但到目前爲止沒有運氣。任何幫助深表感謝!

編輯 這是我的代碼行。

$line =~s/<tag([^>]+)>/<!--tag $1-->/g; 
+0

不知道如果正則表達式是問題。我試過: '$ perl -e'if(<>。<> =〜/ ] +)> /){print「yes \ n」}' yes ' 它工作。也許你需要顯示更多的代碼(也許是一個小的repro程序)。 – ctn

+0

適用於我:'my $ s = qq(); $ s =〜/ ] +)> /並打印$ 1;'給出'attr =「12345」'。 – choroba

+0

添加了我的代碼行。 – Jeff

回答

0

您調用字符串操作$line。這是可疑的,因爲您之前必須連接多行,以檢查多行標籤。 請檢查(或張貼)你連接代碼。我90%確定問題在那裏。

你還有另一個問題,你不一定知道。 如果同一行中有多個標籤,則您的正則表達式將替換第一個和最後一個之間的文本。

<tag foo="1">foo bar <tag bar="2">baz spam 

將成爲

<!--tag foo="1">foo bar <tag bar="2"-->baz spam 
您的治療後

,雖然你可能想

<!-- tag foo="1"-->foo bar <!--tag bar="2"-->baz spam 

請使用懶惰版本+量詞:+?

$line = ~s/<tag([^>]+?)>/<!--tag $1-->/g;