Perl正则表达式:结合^与\ Q \ E

时间:2018-06-27 12:37:58

标签: regex perl

我发现,当我在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

0 个答案:

没有答案