正则表达式 – 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |