7

我有一个正则表达式,可以为我在日志中找到错误:

/(exception|error)/i

这有效,除了我不想在发生以下情况时收到警报,我希望发生这种情况:

DD/MM/YYYY 10:20pm: Read exception encountered

如何专门拒绝“遇到读取异常”字符串?我正在尝试使用?!运算符,但失败:

/(?!Read exception encountered)(exception|error)/i

以上仍然匹配我要排除的字符串。

更新: 在尝试了下面的负面后瞻和前瞻解决方案后,我发现 SiteScope 仅支持基本的 POSIX 正则表达式功能,不支持扩展功能。仅使用基本 POSIX 正则表达式功能的解决方案是否可行?

4

4 回答 4

4

您想有效地使用“Negative Lookbehind”(如果您的正则表达式引擎支持它。)您说“我想匹配 X 模式,只要这个其他模式不在它之前。”

在您的示例中,它看起来像这样:

/(?<!read )(exception|error)/i

在此处查看有关“环视”功能的更多信息。

于 2013-07-11T18:34:56.870 回答
1

如果您希望在子字符串Read exception encountered在字符串中时拒绝整个字符串,那么我会简单地使用大多数语言都支持的否定前瞻。

^(?![^\r\n]*?\bRead exception encountered\b)[^\r\n]*?(exception|error)

现场示例:http ://www.rubular.com/r/CV7P9huVsI

在此处输入图像描述

于 2013-07-11T20:30:41.443 回答
1

试试这样的 /([^R][^e][^a][^d]) (exception|error)/

于 2014-02-11T18:15:28.210 回答
0

也许“行首”字符是您所需要的。我假设日志的每一行都有“异常”或“错误”。所以你可以匹配

/^(RegexpForDateTimeGoesHere)(exception|error)/i

这将匹配时间戳之后的每个异常或错误消息。如果时间戳和(异常|错误)之间存在“读取”,它将不匹配。

于 2013-07-11T18:38:52.967 回答