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

goe*_*goe 13 regex perl

我有可能持有等特殊字符的字符串:$,(,@,#,等我需要能够对字符串进行正则表达式.

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

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

 $p_id =~ /^$key/
Run Code Online (Sandbox Code Playgroud)

Яeg*_*ght 22

$p_id =~ /^\Q$key\E/;
Run Code Online (Sandbox Code Playgroud)

  • 这与调用`quotemeta($ key)`相同 (6认同)
  • 引用和结束引用.这意味着$ key被视为没有特殊字符的字符串. (2认同)

Jef*_*f B 6

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

鉴于:

$p_id = '$key$^%*&#@^&%$blah!!';
Run Code Online (Sandbox Code Playgroud)

使用:

$p_id =~ /^\$key/;
Run Code Online (Sandbox Code Playgroud)

要么

$p_id =~ /^\Q$key\E/;
Run Code Online (Sandbox Code Playgroud)

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