使用Path::Tiny。它有一个方法:children可以用作:
@paths = path("/tmp")->children( qr/\.txt$/ );
如果提供了可选的qr //参数,它只返回对象 与给定正则表达式匹配的子名称。只有基地 name用于匹配
所以
@paths = path("/tmp")->children( qr/\A(foo|bar|baz)\z/ );
将返回foo
中找到的bar
baz
/tmp
个文件。
我需要相反的,想要任何文件但不是(foo|bar|baz)
。
以下内容可以过滤掉不需要的内容,
@paths = grep { $_->basename !~ /^(foo|bar|baz)$/ } path("/tmp")->children;
但想知道如何为它编写qr
。
所以,问题:如何为:任何文件创建qr
表达式,但不 foo|bar|baz
?
我尝试了否定前瞻
path(...)->children( qr/\A (?!(foo|bar|baz)) \z/x );
但是,它没有做我认为它应该做的事情:) - 例如我的正则表达式错了。
答案 0 :(得分:4)
将\z
置于负面预测
qr/\A(?!(?:foo|bar|baz)\z)/