2011-12-12 53 views
-5
$test2 = "<id><![CDATA[cyber_monday_deal]]></id>\n"; 

$test2 =~ s/<id><![CDATA[cyber_monday_deal]]><\/id>/<id><![CDATA[cyber monday deal 3]]><\/id>/m; 

print $test2 

我得到舊的test2,而不是替換的。這個perl替換爲什麼不起作用?

是否有任何引號工作以逃避整個字符串被替換。

+1

你覺得's///m;'在做什麼?你用自己替代某個東西,你忘記了逃避'/'s,並且原始字符串與正則表達式無關。 – Dan

+1

@丹,不,雙方是不一樣的 – ysth

+0

他們是,當我第一次寫它..我的壞.. – xyz

回答

4

[CDATA[cyber_monday_deal]]是一個字符類。

+1

關閉:'[CDATA [cyber_monday_deal]'是一個字符類 – ysth

0

可以使用\ Q可指明元字符如[應當被認爲是文字字符正則表達式的一部分:

$test2 =~ s/\Q<id><![CDATA[cyber_monday_deal]]><\/id>/<id><![CDATA[cyber monday deal 3]]><\/id>/m; 

\ Q的效果在\ E或正則表達式的結尾處結束。它不會使$@文字,但確實使任何正則表達式插入文字。

1

根據您最近的問題判斷,您嘗試使用正則表達式處理XML失敗。你顯然甚至不知道正方括號必須是在正則表達式中被轉義了。因此,規範不應該

/<![CDATA[cyber_monday_deal]]>.../ 

/<!\[CDATA\[...\]\]>.../ 

使用正確的XML解析模塊,請http://perl-xml.sourceforge.net/faq/