2016-12-29 58 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 {}在那場我得到了多個我想要的事件。