我有一组文件路径,希望列出所有不包含x/y/z/
的文件路径。另一个限制是我不能使用print if !m{x/y/z/}
,因为我没有脚本的写权限。我可以提供用于包含(作为命令行选项)的正则表达式模式,即将打印匹配的所有内容。
这是我的尝试。我正在尝试匹配所有不在它们前面具有x/y/z/
的行。
#!/usr/bin/perl
use warnings;
use strict;
while(<DATA>) {
print if m{(?<!x/y/z/).*};
}
__DATA__
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/a/b/m.cc
x/y/a/b/m.cc
我期望它只会打印底部两个字符串,但实际上它打印了全部内容。但是当我将模式更改为
(?<=x/y/z/).*
时,它仅打印前三个字符串。x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
为什么会这样,我应该如何修复我的正则表达式?
m{(?<!x/y/z/).*}
匹配x/y/z/a/b/x.cc
是因为m{(?<!x/y/z/).*}
匹配/y/z/a/b/x.cc
。 - ikegami