加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – Perl中的负面看后断言

发布时间:2020-12-14 02:29:18 所属栏目:百科 来源:网络整理
导读:我有一组文件路径,我想列出所有不包含x / y / z /的文件路径.另一个限制是我不能使用print if!m {x / y / z /},因为我对脚本没有写权限.我可以提供包含正则表达式模式的脚本(作为命令行选项),即将打印匹配的所有内容. 这是我的尝试.我试图匹配所有没有x / y
我有一组文件路径,我想列出所有不包含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 /).*时,它只打印前3个字符串:

x/y/z/a/b/x.cc
x/y/z/a/b/x.cc
x/y/z/a/b/x.cc

为什么这样,我该怎么做来修复我的正则表达式?

你需要的是一个消极的前瞻.所以,直接从 the monastery开始答案:
#!/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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读