使用正则表达式查找不匹配(多行)

时间:2014-08-14 21:05:43

标签: regex perl

我有一个多行文件,我试图找到该文件是否包含正则表达式字符串以外的任何内容。

例如:

test 1 str
test 2 str
unmatched string

示例正则表达式:

/test .* str/

如果在上述数据中找到匹配项,则此正则表达式返回true。但是,我希望它在第一次不匹配时返回false。那可能吗?有什么建议吗?

3 个答案:

答案 0 :(得分:1)

use strict;
use warnings;
while(<>)
{
    return 0 unless(/test .* str/);
}
return 1;

答案 1 :(得分:1)

通常使用$string =~ /PATTERN/来测试$string是否与特定的正则表达式模式匹配。

但是,也可以测试是否为负值,或者不匹配:$string !~ /PATTERN/

在这种情况下,我认为你可以做得更简单,如下所示:

use strict;
use warnings;

while (<DATA>) {
    print if ! /test.*str/;
}

__DATA__
test 1 str
test 2 str
unmatched string

输出:

unmatched string

答案 2 :(得分:0)

如果你使用这样的正则表达式,你可以使用一个小技巧:

^test . str$|(.*)

<强> Working demo

然后抓取捕获组的内容。如果捕获组包含数据,那么您认为您的文件与您的需求不符。

enter image description here