词法分析器与正则表达式

在设计SIEM的时候,一个很重要的环节就是日志的标准化(Normalization,或者叫范式化)。而对此通常采用的手法是采用基于正则表达式的字符串匹配。此次,介绍另一种方式:不依赖于正则表达式的词法分析器(Antlr)。固然,有的词法分析器依然是基于正则表达式的。html

正则表达式被认为是文本处理的首选工具,当咱们使用正则表示式时,首先定义一个正则表达式,而后和预期文本进行匹配,最终再按照正则表示式 中的分组,逐一获取相匹配的数据,而后再进行下一步的处理(输出、替换等等)。在进行比较复杂一些的问题时,使用正则表达式,总体处理过程比较漫长,有时 为了处理一个问题,写出的正则表达式晦涩难懂,很不便于维护。java

在 Antlr 中词法分析器使用了和语法分析器相同的技术来构造,对词法记号 Token 的匹配使用了递归降低的策略,使得词法分析器具备处理上下文无关文法的能力,而正则表达式所能处理的文法只包含正则文法(线性文法),所以词法分析器能够 处理不少正则表达式难以处理的问题,好比左括号和右括号的成对匹配等。正则表达式

此外,在 Antlr 中词法分析器所要匹配的词法记号,经过相互引用的方式进行嵌套和递归定义,比正则表达的书写更直观,更加便于维护。ide

总的来讲,使用 Antlr 词法分析器处理文本和正则表达式相比,处理能力更强大,便于开发和测试,在本文的后续部分中,咱们一块儿来看一下如何使用 Antlr 词法分析器完成抽取、转换、重写这三类文本处理工做。工具

查看这里了解更多关于Antlr的信息。测试