正则表达式Perl中的多个预测

时间:2013-01-24 17:39:02

标签: regex perl

我必须在字符串中检查模式(模式C)的正匹配以及模式A和模式B的否定匹配。如何在单个正则表达式中执行此操作?

如果模式C在那里,则字符串中不应存在模式A和模式B.

请帮我查看代码段。以下代码不适用于5.8.5和5.10.1

open(FH, "file");
while(<FH>){
    print if(/(?!PATTERN A)(?!PATTERN B)(?=PATTERN C)/);
}
close FH;

2 个答案:

答案 0 :(得分:3)

这完全取决于你如何编写模式..

该模式应始终以.*?.*

开头

所以,你可以写

(?!.*?PATTERN A)(?!.*?PATTERN B)(?=.*?PATTERN C)

答案 1 :(得分:1)

除非环境需要,否则不需要花哨的正则表达式。你所需要的只是

print if /PATTERN A/ and not (/PATTERN B/ or /PATTERN C/);