如何编写正则识别CEF Syslog日志引号内的所有等号?
解决CEF Syslog消息中引号内多等号的正则匹配问题
问题背景
需要解析CEF Syslog消息中的URL路径,现有正则无法处理引号包裹的值内存在多个未转义“=”的场景,目标是精准识别所有位于双引号内部的“=”符号。
现有正则\".*(=).*\"存在两个核心问题:
- 贪婪匹配会导致跨引号范围的错误匹配
- 仅能捕获引号内的第一个“=”,无法识别多个等号
示例场景
原始CEF消息片段:
<14>1 2022-12-16T12:07:15+00:00 HOSTNAME CEF:0|Palo Alto Networks|PAN-OS|9.4.1|Suspicious HTTP Evasion Found|THREAT|1|rt=Dec 16 2022 12:07:15 GMT deviceExternalId=000000000 request="browser.events.data.msn.com/OneCollector/1.0?cors=true&content=" cs2Label=URL Category cs2=internet-portals
现有正则仅能匹配第一个“=”,无法识别content=中的等号,而预期是两个等号都被匹配。
解决方案
使用基于环视断言的正则表达式,精准锁定双引号内部的所有“=”:
(?<="[^"]*)=(?=[^"]*")
正则解释
(?<="[^"]*):反向肯定环视,确保当前位置的左侧是双引号,且引号后到当前位置之间没有其他双引号=:匹配目标等号字符(?=[^"]*"):正向肯定环视,确保当前位置的右侧直到下一个双引号之间没有其他双引号
这个正则会匹配所有位于一对双引号内部的“=”,不会跨引号匹配,也不会遗漏同一引号内的多个等号。
匹配效果验证
针对上述示例消息,该正则会同时匹配:
cors=true中的=content=中的=
完全符合预期的匹配结果。
内容的提问来源于stack exchange,提问作者rik1254
相关产品推荐
相关产品推荐

