我有一个正则表达式,它在我的日志中找到错误:
/(exception|error)/i
这是有效的,但我不希望在发生以下情况时收到警报,我希望这种情况发生:
DD/MM/YYYY 10:20pm: Read exception encountered
如何具体拒绝'遇到异常遇到'字符串?我正在尝试使用?!运营商,但失败了:
/(?!Read exception encountered)(exception|error)/i
上面仍然匹配我要排除的字符串。
更新 在尝试了下面的负面观察和前瞻解决方案之后,我发现SiteScope仅支持基本的POSIX正则表达式功能,而不支持扩展功能。只使用基本的POSIX正则表达式功能是否可以实现解决方案?
答案 0 :(得分:4)
你想使用“负面观察”(如果你的正则表达式引擎支持它。)有效地说“我想匹配X模式,只要这个其他模式不在它之前。”
在您的示例中,它看起来像这样:
/(?<!read )(exception|error)/i
详细了解“外观”功能here。
答案 1 :(得分:1)
如果您希望在子字符串Read exception encountered
位于字符串中时拒绝整个字符串,那么我只会使用大多数语言支持的负面预测。
^(?![^\r\n]*?\bRead exception encountered\b)[^\r\n]*?(exception|error)
实例:http://www.rubular.com/r/CV7P9huVsI
答案 2 :(得分:1)
尝试这样的事情 /([^ R] [^ e] [^ a] [^ d])(异常|错误)/
答案 3 :(得分:0)
也许你所需要的“行首”字符。 我假设日志的每一行都有“异常”或“错误”。 所以你可以匹配
/^(RegexpForDateTimeGoesHere)(exception|error)/i
这将匹配直接跟在时间戳之后的每个异常或错误消息。如果时间戳和(异常|错误)之间存在“读取”,则它将不匹配。