Perl Grep排除

时间:2016-04-19 18:56:22

标签: 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);  

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

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

1 个答案:

答案 0 :(得分:5)

它是魔法正则表达式"再次,预计将以单一模式移动地球

很难从您的问题中判断出您想要的结果,但看起来您希望任何名称中带有点的文件不以readme或{{{{}}开头1}}

所以写下来。毕竟,这就是makefile的工作方式:它只是一个要忽略的文件或文件模式列表,它不是一个超长复杂的全局表达式

这种方式,其他人,你自己在六个月内'时间,将能够弄清楚你的代码做了什么

.gitignore

输出

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;