当我将正则表达式包含在另一个正则表达式中时,如何转义它?

yeg*_*256 3 regex perl

我试图在另一个正则表达式中使用字符串作为正则表达式:

my $e = "a+b";
if ('foo a+b bar' =~ /foo ${e} bar/) {
    print 'match!';
}
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 Perl 将其视为+特殊字符。如何在不改变 的值的情况下逃脱它$e

Sha*_*awn 5

您可以使用\Qand\E,它将它们之间的正则表达式元字符视为文字:

#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;

my $e = "a+b";
if ('foo a+b bar' =~ /foo \Q$e\E bar/) {
    say 'match!';
}
Run Code Online (Sandbox Code Playgroud)