正则表达式:需要一个替代方案来进行积极的回顾

Regex: need an alternative for positive lookbehind

我有一个在日志文件中搜索 IP 地址的正则表达式。我正在为此使用积极的回顾。我想在包含 phpExecution 的行中获取 IP 地址。我的正则表达式是

(?<=.*sqlExecution.*"ip":")[^"]+

问题是我们使用的日志分析工具(graylog)不支持lookbehinds。此正则表达式适用于 VSCode 搜索和在线正则表达式测试器。但是在graylog中,是不行的。

这个正则表达式是否有没有后视的替代方案?

示例日志行:

<200> Nov 16 14:36:10 phpExecution INFO: Php Execution {"ip":"33.333.333.33","workspace":"gasqazvin","timeZone":"2019-11-16 14:11:10","usrUid":"","action":"phpExecution","filename":"/var/www/html/pm/shared/sites/work/public/1244635345345/23425452.php","url":"/syswork/fa/modern/1244635345345/23425452.php?"}

不仅仅是 IP 字段,我必须对所有字段都这样做,例如 workflowtimezone、...。所以它可能不仅仅是数字。

你可以试试这个模式phpExecution.+"ip":\s*"([^"]+)

解释:

phpExecution - 按字面意思匹配 phpExecution

.+ - 1+ 个任意字符

"ip": - 按字面意思匹配 "ip":

\s* - 0+ 个空格

"([^"]+) - 按字面匹配 ",然后从 " 中匹配 1+ 个字符并将其存储在 第一个捕获组 - 这将成为你想要的价值

请注意,您可以使用任何字段名称代替 ip

Demo

这里有一个解决方案:

\"ip\":\"([^\"]+)\".+\"action\":\"phpExecution\".+

假设如下:phpExecution 总是在 JSON

中的 IP 地址之后

演示:https://regex101.com/r/6rJcia/1

请注意,我建议为这项工作使用 JSON 解析器。