无需负向前瞻,匹配非4位数字加连字符开头行的正则表达式
无需负向前瞻的正则替代方案
要匹配不以4位数字加连字符(如2023-)开头的行,可以通过分支正则覆盖所有不符合目标模式的场景,具体拆分如下:
- 匹配空行:
^$ - 匹配开头非数字的行:
^[^0-9].*$ - 匹配开头是1-3位数字,后续不是连字符或直接结束的行:
^[0-9]{1,3}(?:[^-]|$).*$ - 匹配开头是4位数字,但后续不是连字符的行:
^[0-9]{4}(?:[^-]|$).*$
将以上分支合并为一个完整正则:
^$|^[^0-9].*$|^[0-9]{1,3}(?:[^-]|$).*$|^[0-9]{4}(?:[^-]|$).*$
简化版正则
可以把后两个分支合并,进一步精简:
^$|^[^0-9].*$|^[0-9]{1,4}(?:[^-]|$).*$
Filebeat配置示例
如果是在Filebeat的multiline插件中使用(比如过滤不需要合并的行),配置片段如下:
multiline: pattern: '^$|^[^0-9].*$|^[0-9]{1,4}(?:[^-]|$).*$' negate: false match: after
这个正则通过枚举所有“不符合4位数字+连字符开头”的情况,完全避开了负向前瞻语法,兼容不支持该特性的正则引擎。
内容的提问来源于stack exchange,提问作者Cyril David
相关产品推荐
相关产品推荐

