我正在使用合法文件名列表的值,但是我尝试排除某些文件名匹配。我无法弄清楚排除情况。
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),因此排除的原因与单独清除不需要的名称相反。
答案 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;