Perl Grep排除

use*_*900 0 perl grep

我正在为合法文件名列表中的值,但是我试图排除某些文件名匹配.我无法弄清楚排除情况.

List = (  
"fileA",  
"Makefile.am.cppcheck",  
"Makefile.am.cpplint",  
"README-autotools.md",  
"README-metrics.md",  
"README.md",  
"autogen.sh",  
"configure.ac",  
"test.pl",  
)  

@files = grep(/(?!readme|makefile)([a-z]\.[a-z])/i,@list);  
Run Code Online (Sandbox Code Playgroud)

grep工作正常没有排除但我缺少什么来排除匹配(readme | makefile)或其他模式的项目?

编辑:我的文件名必须包含一个句点(如test.pl),因此排除的原因与单独清除不需要的名称相反.

Bor*_*din 5

它再次成为"魔法正则表达式",预计会以一种模式移动地球

很难从你的问题中判断出你想要什么结果,但看起来你想要任何名称中没有以点开头的文件readme或者makefile

所以写下来吧.毕竟,这是.gitignore有效的:它只是一个要忽略的文件或文件模式列表,它不是一个超长的超复杂的glob表达式

这样,其他人,以及您自己在六个月后,将能够了解您的代码所做的事情

use strict;
use warnings 'all';
use feature 'say';

my @list = qw/
    fileA  
    Makefile.am.cppcheck  
    Makefile.am.cpplint  
    README-autotools.md  
    README-metrics.md  
    README.md  
    autogen.sh  
    configure.ac  
    test.pl  
/;

my @filtered = grep {
    /\./ and not /^readme/i and not /^makefile/i;
} @list;

say for @filtered;
Run Code Online (Sandbox Code Playgroud)

产量

autogen.sh
configure.ac
test.pl
Run Code Online (Sandbox Code Playgroud)