如果'是定界符,或者从变量进行插值,则正则表达式\QW\ER匹配QWER而不是WR(在Perl的v5.6.2,v5.10.1和v5.18.2以及http://www.perlfect.com/articles/regextutor.shtml上观察到)i。例如,模式中的\Q \E不会解释为引号转义,而是文字Q E

例子:

#!/usr/bin/env perl
$re = '\QW\ER';
print '$re = ', $re, "\n";
while (<DATA>)
{
    print qw(/\QW\ER/), "  matches ", $_ if /\QW\ER/;
    print qw(m'\QW\ER'), " matches ", $_ if m'\QW\ER';
    print qw(/$re/), "     matches ", $_ if /$re/;
}
__DATA__
QWERT
WRONG

输出:
$re = \QW\ER
m'\QW\ER' matches QWERT
/$re/     matches QWERT
/\QW\ER/  matches WRONG

(只有最后一行是我所期望的。)

这是一个错误吗? ... 一项功能? ...记录在任何地方?

最佳答案

如果您使用带有转义符的字符串定义正则表达式,则可能会观察到此情况:

# don't use strings if you have escapes:
#  my $re = '(?<=\QW\E)R';
my $re = qr/(?<=\QW\E)R/;
/($re)/ and print "$_: $1\n" for qw(QWERT WRONG);

关于regex - 在某些情况下,为什么在Perl模式中将 `\Q` `\E`解释为文字 `Q` `E`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21113830/

10-12 20:04