2016-12-29 125 views
0

我正在尝试编写一个会导致多个匹配的grok表达式。我正在解析具有5次相同模式重复的行。具有多个匹配的Logstash Grok模式

我已经能够使用一个正则表达式来创建一个简单的模式,它将返回多个匹配,但似乎Grok不能这样工作。我不太了解Ruby,所以我没有真正检查代码。

例输入:

222444555 

模式:

(?<number>\d{3})* 

我本来期望的输出是这样的:

"number" : [ 
    [ 
     "222", "444", "555" 
    ] 
] 

或类似的东西。这在Grok中可能吗?我知道我可以重复这个模式三次,但是在某些行中有不明重复的次数。

任何指针?

+0

如果有未知数量的重复,您将如何设置“{3}”? –

+0

{3}是\ d(数字)字符类的重复。所以我试图找到(这只是一个简化的表示)是3位数的重复。所以用333444555的输入,我正在寻找3组数字,每组三位数字。 – Gavin

+0

糟糕,我的坏。感谢您的澄清。 –

回答

0

我采取了不同的方法。我用grok来提取重复的部分。然后我用一个ruby {}过滤器使用扫描功能砍行成几部分:

ruby { 
    code => "event.put('segment', event.get('segments').scan(/.{3}/)) 
} 

这工作真的很好,因为它创造了段属性的数组,然后接着split {}在那场我得到了多个我想要的事件。