如果使用标准POSIX正则表达式前面有另一个字符串,你如何拒绝一个字符串?

时间:2013-07-11 18:27:01

标签: regex sitescope

我有一个正则表达式,它在我的日志中找到错误:

/(exception|error)/i

这是有效的,但我不希望在发生以下情况时收到警报,我希望这种情况发生:

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

如何具体拒绝'遇到异常遇到'字符串?我正在尝试使用?!运营商,但失败了:

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

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

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

4 个答案:

答案 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

enter image description here

答案 2 :(得分:1)

尝试这样的事情 /([^ R] [^ e] [^ a] [^ d])(异常|错误)/

答案 3 :(得分:0)

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

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

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