为什么这个perl替换不起作用?

时间:2011-12-12 07:12:25

标签: perl xml-parsing

$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,而不是替换的。

是否有任何引号可以转义整个字符串以进行替换。?

3 个答案:

答案 0 :(得分:4)

[CDATA[cyber_monday_deal]]是一个角色类。

答案 1 :(得分:1)

根据您最近的问题判断,使用Regex处理XML的尝试失败了。您显然甚至不明白方括号必须在正则表达式中转义。因此规范不应该是

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

但是

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

请使用正确的XML解析模块http://perl-xml.sourceforge.net/faq/

答案 2 :(得分:0)

您可以使用\ Q来表示正则表达式的一部分,其中元字符如[应该被视为文字字符:

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

\ Q的效果结束于\ E或正则表达式的结尾。它不会使$@字面值,但会使用文字插入任何正则表达式。