带转义右括号的结构化日志正则匹配问题求助
解决方案
要解决日志末尾出现未转义]乱码时的正则匹配错误问题,核心是精准定位结构化数据的结束符(未被反斜杠转义的]),忽略后续乱码。
修改后的正则表达式
^(<\d+>)\s?(\d*)\s(.*?){7}\s\[(.*?(?<!\\))\]
关键修改说明
原正则中\[(.*)\]的贪婪匹配会错误包含末尾乱码里的未转义],替换为以下逻辑:
.*?:非贪婪模式匹配任意字符,避免过度延伸到乱码区域(?<!\\):负向回顾后发断言,确保匹配到的]前面没有反斜杠(即不是转义后的\]),以此精准定位结构化数据的结束边界
匹配效果
- 对于无乱码的标准日志,能正确捕获日志头部与方括号内的结构化数据
- 对于末尾带有含未转义
]的乱码日志,会自动在第一个合法的结束]处停止匹配,完全忽略后续乱码
内容的提问来源于stack exchange,提问作者Neil Walker
相关产品推荐
相关产品推荐

