如果text包含第二个字符串匹配,则regex排除hit

时间:2014-06-23 10:01:37

标签: regex jenkins

我正在尝试搜索日志文件以查看是否出现了任何警告,以便我可以使用Jenkins插件在“文本查找器”中在Jenkins管道中发出警告。

但是,我有一个案例,如果字符串也包含plms,我不希望在日志文件中对字符串“CRIT”进行命中。

E.g。 我在日志文件中有以下文本:

<CRIT> 23-Jun-2014::10:57:13.649 Upgrade committed
<CRIT> 23-Jun-2014::10:57:13.703 no registration found for callpoint plmsView/get_next of type=external

我对第二行的警告不感兴趣,所以我在Jenkins的Text Finder中添加了以下正则表达式:

WARN|ERROR|<ERR>|/^(?=<CRIT>)(?=^(?:(?!plms).)*$).*$/

只有当字符串不包含plms,即第一行时,才应该触及CRIT,但我不会在任何一行上获得命中。

我从这里得到了代码:Combine Regexp

有人可以帮我纠正一下吗?谢谢!

2 个答案:

答案 0 :(得分:1)

你应该使用这样的东西:

WARN|ERROR|<ERR>|<CRIT>(?!.*?no registration found)

更改no registration found部分以匹配您要排除的<CRIT>邮件。

此表达式也适用于以下行:

<INFO> User WARNER registered

所以你应该考虑使用类似的东西:

^(WARN|ERROR|<ERR>|<CRIT>(?!.*?no registration found))

仅当令牌位于行的开头时才匹配(相应地更改令牌)。

答案 1 :(得分:0)

这应该适合你:

^<CRIT>(.(?!plms))*$

Demo and explanation