为什么这个perl替换不起作用? $test2=“\n”; $test2=~s///m; 打印$test2

为什么这个perl替换不起作用? $test2=“\n”; $test2=~s///m; 打印$test2,perl,xml-parsing,Perl,Xml Parsing,我得到的是旧的test2,而不是替换的test2 任何引号都可以转义要替换的整个字符串。[CDATA[cyber\u monday\u deal]]是一个字符类。您可以使用\Q来指示正则表达式的一部分,其中的元字符,例如[应被视为文字字符: $test2 = "<id><![CDATA[cyber_monday_deal]]></id>\n"; $test2 =~ s/<id><![CDATA[cyber_monday_deal]]>

我得到的是旧的test2,而不是替换的test2


任何引号都可以转义要替换的整个字符串。

[CDATA[cyber\u monday\u deal]]
是一个字符类。

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

$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=~s/\Q//m;

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

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

//
但是

//

请使用适当的XML解析模块。

你认为
s///m;
在做什么?你在用自身替换某些东西,你忘了转义
///code>s,并且原始字符串与正则表达式不匹配。@Dan,不,双方不相同,当我第一次编写它时……我的错..关闭:
[CDATA[cyber\u monday\u deal]
是一个字符类
$test2 =~ s/\Q<id><![CDATA[cyber_monday_deal]]><\/id>/<id><![CDATA[cyber monday deal 3]]><\/id>/m;
/<![CDATA[cyber_monday_deal]]>.../
/<!\[CDATA\[...\]\]>.../