【发布时间】:2019-11-26 15:11:33
【问题描述】:
我正在尝试使用 regex/grok 解析 logstash 中的 URL。我已经弄清楚了大部分字符串,但我被困在最后一部分,我发现很难解释:
这是我坚持的部分:
在 Logstash 中,我想捕获整个字符串并将其转储到名为 api_info 的字段中,除非它包含字符串 &freeText=,在这种情况下,我希望 &freeText= 之前的所有内容都进入 @ 987654324@ 字段,&freeText= 之后的所有内容都进入 api_search 字段。否则,api_search 字段应为空。
这是我到目前为止/尝试过的:
(?<api_info>.*?)(?=&freeText=)?(:?&freeText=)(?<api_search>.*)?
(?<api_info>.*)((:?&freeText=)(?<api_search>.*))?
输入字符串:
womens%7cshoes%ctrainer&pageSize=60&freeText=shoes30
预期输入/输出:
womens%7cshoes%ctrainer&pageSize=60&freeText=shoes30
api_info:"womens%7cshoes%ctrainer&pageSize=60", api_search:"shoes30"
mens%7trainers&pageSize=90
api_info:"mens%7trainers&pageSize=90", api_search:null
【问题讨论】:
-
为什么不简单地用
&freeText分割字符串并根据分割值决定api_search
标签: regex pcre regex-lookarounds logstash-grok regex-greedy