Regex Perl正则表达式:负的lookaheads

Regex Perl正则表达式:负的lookaheads,regex,perl,negative-lookahead,Regex,Perl,Negative Lookahead,我有这个测试文本: cake/app/webroot/js/compiled/shop.js cake/app/webroot/js/compiled/shop.min.js cake/app/webroot/js/good/thing.js 当我尝试这个: /^(?!.*compiled)(?!.*min).*$/ 什么都不匹配。但当我补充说: /^.* 从一开始,它与每行上的某些内容相匹配。(我只希望最后一行匹配。) 我遗漏了什么?您的第一个正则表达式与第三行匹配 my $re = q

我有这个测试文本:

cake/app/webroot/js/compiled/shop.js
cake/app/webroot/js/compiled/shop.min.js
cake/app/webroot/js/good/thing.js
当我尝试这个:

/^(?!.*compiled)(?!.*min).*$/
什么都不匹配。但当我补充说:

/^.*
从一开始,它与每行上的某些内容相匹配。(我只希望最后一行匹配。)


我遗漏了什么?

您的第一个正则表达式与第三行匹配

my $re = qr/^(?!.*compiled)(?!.*min).*$/;
while(<DATA>) {
    chomp;
    if (/$re/) {
        say 'OK : ', $_;
    } else {
        say 'KO';
    }
}


__DATA__
cake/app/webroot/js/compiled/shop.js
cake/app/webroot/js/compiled/shop.min.js
cake/app/webroot/js/good/thing.js


当您在开头添加
*
时,它匹配整行,然后负前瞻为真,在正则表达式消耗所有字符后没有
编译的
最小值
,因此匹配为真。

它确实选择了最后一行,对吗?
KO
KO
OK : cake/app/webroot/js/good/thing.js