詞法分析器與正則表達式

在設計SIEM的時候,一個很重要的環節就是日誌的標準化(Normalization,或者叫範式化)。而對此通常採用的手法是採用基於正則表達式的字符串匹配。此次,介紹另一種方式:不依賴於正則表達式的詞法分析器(Antlr)。固然,有的詞法分析器依然是基於正則表達式的。html

正則表達式被認爲是文本處理的首選工具,當咱們使用正則表示式時,首先定義一個正則表達式,而後和預期文本進行匹配,最終再按照正則表示式 中的分組,逐一獲取相匹配的數據,而後再進行下一步的處理(輸出、替換等等)。在進行比較複雜一些的問題時,使用正則表達式,總體處理過程比較漫長,有時 爲了處理一個問題,寫出的正則表達式晦澀難懂,很不便於維護。java

在 Antlr 中詞法分析器使用了和語法分析器相同的技術來構造,對詞法記號 Token 的匹配使用了遞歸降低的策略,使得詞法分析器具備處理上下文無關文法的能力,而正則表達式所能處理的文法只包含正則文法(線性文法),所以詞法分析器能夠 處理不少正則表達式難以處理的問題,好比左括號和右括號的成對匹配等。正則表達式

此外,在 Antlr 中詞法分析器所要匹配的詞法記號,經過相互引用的方式進行嵌套和遞歸定義,比正則表達的書寫更直觀,更加便於維護。ide

總的來講,使用 Antlr 詞法分析器處理文本和正則表達式相比,處理能力更強大,便於開發和測試,在本文的後續部分中,咱們一塊兒來看一下如何使用 Antlr 詞法分析器完成抽取、轉換、重寫這三類文本處理工做。工具

查看這裏瞭解更多關於Antlr的信息。測試