我发现,当我在Perl正则表达式中将^
与\Q \E
组合在一起时,我不再能获得应有的匹配项:
$names = "20170101--NAME1-NAME2";
@list = ( '20170101--NAME1-NAME2-bt123456789.xml',
'20170101--NAME1-NAME2-bt234567890.xml');
@numbers = ( '123456789', '234567890' );
for my $filename (@list) {
if ($filename =~ /\Q$names\E-bt[^\Q$numbers[0]\E]\.xml/) {
print "$filename\n";
}
}
这将给出0个匹配项,但应匹配'20170101--NAME1-NAME2-bt234567890.xml'
。如果我将if语句中的正则表达式更改为:
/\Q$names\E-bt(\Q$numbers[0]\E)\.xml/
这将返回:
'20170101--NAME1-NAME2-bt123456789.xml'
我知道它与我的原始正则表达式不匹配,只是证明该正则表达式在没有^
的情况下仍然可以工作。为了以防万一,我还尝试了以下方法:
^[\Q$numbers[0]\E] # 0 matches
(^\Q$numbers[0]\E) # 0 matches