Perl regexp如何只逃避一些字符

Tyz*_*zak 8 regex perl escaping special-characters

我有一个字符串 $regexp_as_string

现在我想将它"转换"为正则表达式/将其用作正则表达式

if ($text_to_search =~ $regexp_as_string)
{
...
}
Run Code Online (Sandbox Code Playgroud)

现在有像"."这样的字符.我想自动逃脱它们 - \Q和\ E应该这样做

 if ($text_to_search =~ /\Q$regexp_as_string\E/)
    {
    ...
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法指定应自动转义的字符列表?因为此刻汽车逃脱的方式例如"|" ,但我想保留它.

TLP*_*TLP 14

您可以使用quotemeta,然后选择性地删除反斜杠准备字符串.例如:

my $str = quotemeta('foo${}|'); 
$str =~ s/\\(?=[|])//g; 
say $str;
Run Code Online (Sandbox Code Playgroud)

输出:

foo\$\{\}|
Run Code Online (Sandbox Code Playgroud)

在替换中添加您想要未转义到字符类的任何字符,例如[|?()].