【问题标题】:Regex: need an alternative for positive lookbehind正则表达式:需要一种替代方法来进行积极的后视
【发布时间】:2020-01-22 07:12:32
【问题描述】:

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

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

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

这个正则表达式是否有任何替代方案?

示例日志行:

&lt;200&gt; 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、...。所以它可能不仅仅是数字。

【问题讨论】:

    标签: regex logging lookbehind graylog


    【解决方案1】:

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

    解释:

    phpExecution - 匹配 phpExecution 字面意思

    .+ - 1+ 个字符

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

    \s* - 0+ 个空格

    "([^"]+) - 从字面上匹配 ",然后匹配来自 " 的 1+ 个字符并将其存储在 第一个捕获组 - 这将是您想要的值

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

    Demo

    【讨论】:

    • 感谢您的快速回答:)。我试过这个,它有点工作,但问题是它将所有单词从 phpexecution 返回到 IP 地址。 phpExecution INFO: Php Execution {"ip":"46.101.167.63
    • 只获取第一个经过计算的组 - 这就是我使用它的原因:)
    • 哦,我明白了,你能帮我怎么做吗? graylog中没有地方可以使用任何代码sn-ps,只有一个正则表达式字段和返回类型。我是正则表达式的新手,谢谢
    • @ArashMohammadi 只需谷歌“greylog 正则表达式捕获组”。我从来没有用过 graylog,所以我帮不上什么忙了。
    • 看起来服务器已关闭。这就是不返回结果的原因。你的正则表达式完美。谢谢
    【解决方案2】:

    这里有一个解决方案:

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

    假设如下:phpExecution 总是在 JSON 中的 IP 地址之后

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

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

    【讨论】:

    • 感谢您的快速回答:)。,ip 在 phpExecustion 之后。我不能使用 json 解析器。 graylog 中只有正则表达式
    • 这总是相同的顺序吗?在您的示例中,“ip”在“phpExecution”之前
    • 是的,ip在phpExecution之后。
    猜你喜欢
    • 2017-05-12
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多