Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 贪婪匹配,除非它运行到特定的字符串,然后匹配到特定的组?_Regex_Pcre_Regex Lookarounds_Logstash Grok_Regex Greedy - Fatal编程技术网

Regex 贪婪匹配,除非它运行到特定的字符串,然后匹配到特定的组?

Regex 贪婪匹配,除非它运行到特定的字符串,然后匹配到特定的组?,regex,pcre,regex-lookarounds,logstash-grok,regex-greedy,Regex,Pcre,Regex Lookarounds,Logstash Grok,Regex Greedy,我正在尝试使用regex/grok解析logstash中的URL。我已经猜出了大部分的线索,但最后一部分我被卡住了,我发现很难解释: 这是我一直坚持的部分: 在Logstash中,我希望捕获整个字符串并将其转储到名为api\u info的字段中,除非它包含字符串&freeText=,在这种情况下,我希望在&freeText=之前的所有内容都进入api\u info字段,以及&freeText=之后的所有内容进入api\u搜索字段。否则,api_搜索字段应为空 以下是我迄今为止/已经尝试过的: (

我正在尝试使用regex/grok解析logstash中的URL。我已经猜出了大部分的线索,但最后一部分我被卡住了,我发现很难解释:

这是我一直坚持的部分:

在Logstash中,我希望捕获整个字符串并将其转储到名为
api\u info
的字段中,除非它包含字符串
&freeText=
,在这种情况下,我希望在
&freeText=
之前的所有内容都进入
api\u info
字段,以及
&freeText=
之后的所有内容进入
api\u搜索
字段。否则,api_搜索字段应为空

以下是我迄今为止/已经尝试过的:

(?<api_info>.*?)(?=&freeText=)?(:?&freeText=)(?<api_search>.*)?
(?<api_info>.*)((:?&freeText=)(?<api_search>.*))?

请注意,如果空组转换为null,请确保,但您可以使用替代项来匹配字符串的结尾
$
&freeText=

对于api_搜索组,您可以匹配任何字符0+次

(?<api_info>.+?)(?:&freeText=|$)(?<api_search>.*)

(?

如果使用正向前瞻,它将永远不会与第二条消息匹配。因此请使用交替

"((?<api_info>.*)(&freeText=)(?<api_search>.*)?|(?<api_info>.*))"
((?*)(&freeText=)(?*)|(?*))
为什么不简单地用
&freeText
拆分字符串,并根据拆分后的值决定api_搜索
"((?<api_info>.*)(&freeText=)(?<api_search>.*)?|(?<api_info>.*))"