正则表达式:需要一个替代方案来进行积极的回顾
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 字段,我必须对所有字段都这样做,例如 workflow
、timezone
、...。所以它可能不仅仅是数字。
你可以试试这个模式phpExecution.+"ip":\s*"([^"]+)
解释:
phpExecution
- 按字面意思匹配 phpExecution
.+
- 1+ 个任意字符
"ip":
- 按字面意思匹配 "ip":
\s*
- 0+ 个空格
"([^"]+)
- 按字面匹配 "
,然后从 "
中匹配 1+ 个字符并将其存储在 第一个捕获组 - 这将成为你想要的价值
请注意,您可以使用任何字段名称代替 ip
。
这里有一个解决方案:
\"ip\":\"([^\"]+)\".+\"action\":\"phpExecution\".+
假设如下:phpExecution
总是在 JSON
中的 IP 地址之后
演示:https://regex101.com/r/6rJcia/1
请注意,我建议为这项工作使用 JSON 解析器。
我有一个在日志文件中搜索 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 字段,我必须对所有字段都这样做,例如 workflow
、timezone
、...。所以它可能不仅仅是数字。
你可以试试这个模式phpExecution.+"ip":\s*"([^"]+)
解释:
phpExecution
- 按字面意思匹配 phpExecution
.+
- 1+ 个任意字符
"ip":
- 按字面意思匹配 "ip":
\s*
- 0+ 个空格
"([^"]+)
- 按字面匹配 "
,然后从 "
中匹配 1+ 个字符并将其存储在 第一个捕获组 - 这将成为你想要的价值
请注意,您可以使用任何字段名称代替 ip
。
这里有一个解决方案:
\"ip\":\"([^\"]+)\".+\"action\":\"phpExecution\".+
假设如下:phpExecution
总是在 JSON
演示:https://regex101.com/r/6rJcia/1
请注意,我建议为这项工作使用 JSON 解析器。