正则表达式排除字符串,除非存在另一个字符串

问题描述 投票:1回答:1

我正在研究一个流畅的正则表达式来匹配所有日志条目,除非消息包含字符串“dbug”。但是,如果日志在条目中同时包含“dbug”和“fired”,那么我需要正则表达式来匹配该字符串。

这两个字符串可以出现在日志条目中的任何位置,但“dbug”将始终位于“触发”之前。

是否可以构建一个可以执行此操作的单个正则表达式?

我很感激你的帮助!

regex fluentd
1个回答
1
投票

我们可以尝试在这里使用前瞻,例如

^(?:(?!.*\bdbug\b)|(?=.*\bdbug\b.*\bfiring\b)).*$

Demo

第一个前瞻(?!.*\bdbug\b)匹配任何不包含dbug的行,第二个前瞻(?=.*\bdbug\b.*\bfiring\b)匹配任何包含dbugfiring的行。

© www.soinside.com 2019 - 2024. All rights reserved.