使用负前瞻性正则表达式排除Path :: Tiny中的文件

时间:2017-03-29 12:23:20

标签: regex perl

使用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 );

但是,它没有做我认为它应该做的事情:) - 例如我的正则表达式错了。

1 个答案:

答案 0 :(得分:4)

\z 置于负面预测

qr/\A(?!(?:foo|bar|baz)\z)/