当搜索令牌是包含保留字符的var时,Perl正则表达式S& R.

时间:2012-10-03 16:16:22

标签: regex perl

考虑一下:

my $var = "${SOME_VAR}"

my $string "In this text ${SOME_VAR} will be replaced with X"

$string =~ s/$var/X/g;

print "\nprocessed string = <".$string.">";

返回

processed string = <In this text ${SOME_VAR} will be replaced with X>

即。替换不会发生。

但是,如果$ var不包含保留字符($),则替换为DOES:

my $var = "SOME_VAR"
/* everything else the same */

返回

processed string = <In this text ${X} will be replaced with X>

但是当我们将保留字符包含在变量中时,即当搜索令牌不是显式但是参数化时,我不知道如何转义保留字符。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

您的字符串包含$,它具有特殊含义。您可以使用\Q\E来使其正常工作..

$string =~ s/\Q$var\E/X/g;

\ Q禁用模式元字符,直到\ E

答案 1 :(得分:0)

${foo}语法是一个软引用,即使在字符串内也是如此。您正在间接将$SOME_VAR的值分配给$var。如果$SOME_VAR为undef,则会得到一个空字符串,转换为正则表达式中始终匹配

单引号或转义$除了使用\Q之外,还解决了Rohit Jain所说的问题。