当替换字符具有特殊字符时,Perl中的文字字符串替换

时间:2020-02-06 20:35:41

标签: regex string perl

我在使用s///处理包含特殊字符的替换字符串时遇到了麻烦:

> cat replace.pl
use strict;
use warnings;

my $orig_string = 'abc${abc}def';
my $replacer = '${abc}';
my $replacement = 'TEXT';
print "\nBefore replacement: $orig_string";
$orig_string =~ s/$replacer/$replacement/g;
print "\nAfter replacement: $orig_string";

print "\n";

exit;

错误输出:

> /usr/bin/perl replace.pl

Before replacement: abc${abc}def
After replacement: abc${abc}def

如果我在$中将$replacer的{​​{1}}手动转义为my $replacer = '\${abc}';,这将起作用,但是替换器在生产中将具有未知的数字和特殊字符集。

Perl版本:

> /usr/bin/perl -v

This is perl 5, version 16, subversion 3 (v5.16.3)

1 个答案:

答案 0 :(得分:1)

您可以使用:

$orig_string =~ s/\Q$replacer\E/$replacement/g;

这将引用替换字符串,并将所有特殊的正则表达式元字符视为文字。

Read more about quotemeta

您还可以使用:

$replacer = quotemeta($replacer);

替换前。

相关问题