如果'
是定界符,或者从变量进行插值,则正则表达式\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/