正则表达式负面前瞻麻烦

时间:2013-02-21 07:38:26

标签: regex regex-negation

我无法让负面的前瞻工作。

我想在文件中提到所有提及“警告”或“错误”的行,但如果该行提及“clearmake”则不行。

所以它应该抓住这个:

This is a warning : bla bla

但不是这样:

clearmake.exe: This is a warning : bla bla 

我玩过负面的前瞻,但我无法让它发挥作用

(?!clearmake).*$

任何想法?谢谢!

2 个答案:

答案 0 :(得分:4)

您可以在正则表达式中执行此操作,但您需要对此进行高级正则表达式理解。如果您使用2 if()或逻辑运算符和普通字符串搜索来执行此任务,可能会更容易阅读/理解。

您应始终为此类问题提供语言标记,以便有机会获得其他答案。

我解释一个正则表达式解决方案,我假设您正在逐行读取该文件。

  1. 您希望匹配warning error ==>使用替换\b(?:error|warning)\b

  2. 但不包括clearmake ==> ^(?!.*\bclearmake\b)

  3. 所以你的正则表达式看起来像这样:

    ^(?!.*\bclearmake\b).*\b(?:error|warning)\b
    

    here on Regexr

答案 1 :(得分:0)

你可以试试这个

^(?!.*\bclearmake\b).*(warning|error).*$
    ---------------
        |
        |->match further only if the string doesn't have clearmake