Regex Perl中的否定查找断言
我有一组文件路径,我想列出所有不包含Regex Perl中的否定查找断言,regex,perl,Regex,Perl,我有一组文件路径,我想列出所有不包含x/y/z/的文件路径。另一个限制是我不能使用print if!m{x/y/z/}因为我没有脚本的写入权限。我可以为脚本提供要包含的regexp模式(作为命令行选项),即,匹配的所有内容都将被打印出来 这是我的尝试。我正在尝试匹配前面没有x/y/z/的所有行 #!/usr/bin/perl use warnings; use strict; while(<DATA>) { print if m{(?<!x/y/z/).*}; } _
x/y/z/
的文件路径。另一个限制是我不能使用print if!m{x/y/z/}
因为我没有脚本的写入权限。我可以为脚本提供要包含的regexp模式(作为命令行选项),即,匹配的所有内容都将被打印出来
这是我的尝试。我正在尝试匹配前面没有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
为什么会这样,我应该怎么做来修复我的regexp?您需要的是一个负前瞻。因此,答案直接来自:
#!/usr/bin/perl
use warnings;
use strict;
while(<DATA>) {
print if m{^(?!(?s:.*)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
#/usr/bin/perl
使用警告;
严格使用;
while(){
如果m{^(?(?s:.*)x/y/z},则打印;
}
__资料__
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
literal translation:匹配一个字符串,该字符串不以任何数量的字符开头,后跟x/y/z
您真的想过滤掉x/y/zoo/a.cc
<需要添加代码>/或(?:/\z)
。不,我不想筛选出x/y/zoo
。应过滤x/y/z/
下的所有内容。让我适当地编辑这个问题。m{(?matchesx/y/z/a/b/x.cc
因为m{(?matches/y/z/a/b/x.cc
#!/usr/bin/perl
use warnings;
use strict;
while(<DATA>) {
print if m{^(?!(?s:.*)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