我有以下测试文字:
cake/app/webroot/js/compiled/shop.js
cake/app/webroot/js/compiled/shop.min.js
cake/app/webroot/js/good/thing.js
当我尝试这样做时:
/^(?!.*compiled)(?!.*min).*$/
没有任何匹配项。但是当我添加时:
/^.*
从头开始,它与每一行都匹配。 (我只希望最后一行匹配。)
我想念什么?
答案 0 :(得分:2)
您的第一个正则表达式与第三行匹配
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
当您在开头添加.*
时,它与整行匹配,那么负前瞻为true,在正则表达式消耗完所有字符后,没有compiled
或min
,所以匹配是真的。