我正在为合法文件名列表中的值,但是我试图排除某些文件名匹配.我无法弄清楚排除情况.
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),因此排除的原因与单独清除不需要的名称相反.
它再次成为"魔法正则表达式",预计会以一种模式移动地球
很难从你的问题中判断出你想要什么结果,但看起来你想要任何名称中没有以点开头的文件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)