Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 Grok-解析可选字段_Regex_Logstash_Field_Logstash Grok - Fatal编程技术网

Regex Grok-解析可选字段

Regex Grok-解析可选字段,regex,logstash,field,logstash-grok,Regex,Logstash,Field,Logstash Grok,我有来自卡夫卡的数据,我想把它们发送到ElasticSearch。我有一个这样的日志,上面有标签: <TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN></TOTO> 它可以工作,但有时日志会有这样一个新字段(带有标签): APPLI|u A | PRF | ENV|u 1 | 003new 我希望得到带有此字段(TP标记)的行和不带此

我有来自卡夫卡的数据,我想把它们发送到ElasticSearch。我有一个这样的日志,上面有标签:

<TOTO><ID_APPLICATION>APPLI_A|PRF|ENV_1|00</ID_APPLICATION><TN>3</TN></TOTO>
它可以工作,但有时日志会有这样一个新字段(带有标签
):

APPLI|u A | PRF | ENV|u 1 | 003new

我希望得到带有此字段(TP标记)的行和不带此字段的行。如何才能做到这一点?

如果您有一个可选字段,您可以将其与一个可选的命名捕获组进行匹配:

(?:<TP>%{WORD:TP}</TP>)?
^^^                    ^

这是我用来阅读的过滤器

我创建了自己的模式,称为“内容”,它将检索TP标记中的任何内容

\<ID_APPLICATION\>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}\<\/ID_APPLICATION\>\<TN>%{NUMBER:TN}\<\/TN\>(\<TP\>(?<content>(.)*)\<\/TP\>)?
\%{WORD:APPLICATION}\\\\\\%{WORD:PROFIL}\\\\\\\\\%{WORD:code}\\\\%{NUMBER:TN}\(\(?()*)\)?
基本上,我只是在您的模式中添加了一个可选标记

(<TP> ... </TP>)? 
(…)?
为了检索内容(我假设可以是任何内容),我在可选标记中添加了以下内容

(?<content>(.)*)
(?()*)

您是否使用:作为调试器?看起来您可以使用一个可选组:
%{WORD:APPLICATION}\\\\\\\\\\\\\\\%{WORD:ENV}\\\\\\\\\%{WORD:code}%{NUMBER:TN}(?:%{WORD:TP})?
。请尝试让我知道这是否对你有效。它有效!谢谢!!请考虑接受。
\<ID_APPLICATION\>%{WORD:APPLICATION}\|%{WORD:PROFIL}\|%{WORD:ENV}\|%{WORD:CODE}\<\/ID_APPLICATION\>\<TN>%{NUMBER:TN}\<\/TN\>(\<TP\>(?<content>(.)*)\<\/TP\>)?
(<TP> ... </TP>)? 
(?<content>(.)*)