如果'
是分隔符,或者从变量进行插值,则正则表达式\QW\ER
与QWER
匹配,而不与WR
匹配(在v5.6.2,v5中观察到)。 Perl的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
(只有最后一行是我的预期。)
这是一个错误吗? ... 一项功能? ......记录在哪里?
答案 0 :(得分:6)
如果您使用带转义的字符串来定义正则表达式,则可能正在观察此情况:
# 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);
答案 1 :(得分:6)
我在Perl语言参考中找到了解释,perlop部分:
以下转义序列在构造中可用 插值,......
\Q quote (disable) pattern metacharacters till \E or
end of string
\E end either case modification or quoted section
(whichever was last seen)
由于'\QW\ER'
是一个定界符为'
'
的构造,它不提供插值,\Q
\E
不能作为引用转义符