【问题标题】:Find non-match using regex (multiple lines)使用正则表达式查找不匹配项(多行)
【发布时间】:2014-10-08 16:03:08
【问题描述】:

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

例如:

test 1 str
test 2 str
unmatched string

示例正则表达式:

/test .* str/

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

【问题讨论】:

  • 好吧,我对上述问题没有任何想法。到目前为止,我返回的任何内容都是 true ——因为每次它匹配一个字符串时,我的正则表达式实现都不关心其他任何事情。我也不是正则表达式专家。当然,我不是在寻找已解决的答案,而是在寻找建议。

标签: regex perl


【解决方案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】:
use strict;
use warnings;
while(<>)
{
    return 0 unless(/test .* str/);
}
return 1;

【讨论】:

    【解决方案3】:

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

    ^test . str$|(.*)
    

    Working demo

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

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多