一个正则表达式,用于搜索包含字符串的行,而不包含另一个字符串

时间:2015-09-30 02:56:57

标签: regex notepad++

我想分析错误日志。因此,我决定使用Notepad ++在错误日志中搜索所有错误标题,以便我可以获得搜索结果中的所有错误的第一行(其中包含有关错误的简短描述),以确定是否需要深入了解它。但错误日志显然充满了“无用”的错误。一种事件的错误记录,如90%,所以它隐藏了真正的错误,就像在大海捞针一样。

所以从这个例子中编写错误日志:

ERROR on Server1: Network connection reset.
    DETAIL: The client is gone.
ERROR on Server2: Network connection reset.
    DETAIL: The client is gone.
ERROR on Server1: Network connection reset.
    DETAIL: The client is gone.
ERROR on Server1: Null Pointer Error.
    DETAIL: Object 'Cart' does not exists.
    STACKTRACE: 
        at UpdateCart function
        at AddProducttoCart function
ERROR on Server2: Network connection reset.
    DETAIL: The client is gone.
ERROR on Server2: IO Error
    DETAIL: The resource on URL (www.example.com/data.xls) does not exists.
ERROR on Server2: Network connection reset.
    DETAIL: The client is gone.

我想在Notepad ++搜索上创建一个正则表达式,搜索包含字符串" ERROR on"但不包含"网络连接重置",因此搜索结果仅包含:

ERROR on Server1: Null Pointer Error.
ERROR on Server2: IO Error

我该怎么做?我在某处读过正则表达式的反向匹配有点困难和不寻常,但这是可能的。感谢。

是的,我已经尝试过其他一些方法来做这件事,比如找到" ERROR on" + (.*) +"网络连接重置",然后将其替换为空字符串,以便下次在"上搜索" ERROR时,它们将不会出现。但是在搜索和替换之后,错误日志会被奇怪的符号扰乱,之后Notepad ++就会崩溃。我不知道。我从未使用正则表达式在Notepad ++上搜索和替换运气。

2 个答案:

答案 0 :(得分:2)

我会使用否定前瞻。

^(?!.*?\bNetwork connection reset\b).*\bERROR on\b.*

答案 1 :(得分:1)

^ERROR on (?:(?!Network connection reset).)*$

您可以在regex.See演示中使用lookahead

https://regex101.com/r/pV0fH2/1