$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替換爲什麼不起作用?
是否有任何引號工作以逃避整個字符串被替換。
$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替換爲什麼不起作用?
是否有任何引號工作以逃避整個字符串被替換。
可以使用\ Q可指明元字符如[應當被認爲是文字字符正則表達式的一部分:
$test2 =~ s/\Q<id><![CDATA[cyber_monday_deal]]><\/id>/<id><![CDATA[cyber monday deal 3]]><\/id>/m;
\ Q的效果在\ E或正則表達式的結尾處結束。它不會使$
或@
文字,但確實使任何正則表達式插入文字。
根據您最近的問題判斷,您嘗試使用正則表達式處理XML失敗。你顯然甚至不知道正方括號必須是在正則表達式中被轉義了。因此,規範不應該
/<![CDATA[cyber_monday_deal]]>.../
但
/<!\[CDATA\[...\]\]>.../
使用正確的XML解析模塊,請。 http://perl-xml.sourceforge.net/faq/
你覺得's///m;'在做什麼?你用自己替代某個東西,你忘記了逃避'/'s,並且原始字符串與正則表達式無關。 – Dan
@丹,不,雙方是不一樣的 – ysth
他們是,當我第一次寫它..我的壞.. – xyz