如何在字符串中转义特殊字符,我插入到Perl正则表达式中?

时间:2010-01-28 18:03:28

标签: regex perl

我有一个字符串可能包含特殊字符:$(@#,等。 我需要能够在该字符串上执行正则表达式。

现在,如果我的字符串中包含任何这些字符,则正则表达式似乎会破坏,因为这些是正则表达式的保留字符。

有没有人知道一个好的子程序可以很好地逃避任何这些角色,以便以后我可以做类似的事情:

 $p_id =~ /^$key/

2 个答案:

答案 0 :(得分:22)

$p_id =~ /^\Q$key\E/;

答案 1 :(得分:6)

根据你的描述,听起来你倒退了。你不需要转义你匹配的字符串上的字符($ p_id),你需要转义你的匹配字符串'^ $ key'。

假设:

$p_id = '$key$^%*&#@^&%$blah!!';

使用:

$p_id =~ /^\$key/;

$p_id =~ /^\Q$key\E/;

\ Q,\ E对将它们之间的所有内容视为文字。换句话说,您不希望查找变量$ key的内容,而是查找实际的字符串'$ key'。第一个例子只是逃避$。