基于确定有限状态自动机的正则表达式匹配设备和方法

文档序号:6441045阅读:203来源:国知局
专利名称:基于确定有限状态自动机的正则表达式匹配设备和方法
技术领域
本发明涉及属于网络信息处理的正则表达式领域,特别涉及一种基于确定有限状态自动机的正则表达式匹配设备和方法。
背景技术
正则表达式在网络信息处理领域有广泛的应用,比如协议识别、入侵检测等。实现正则表达式匹配主要采用各种状态机,但DFA存在空间爆炸的问题,难以支持较多正则表达式。目前采用DFA的正则表达式匹配方案有几种。一种是适当改写正则表达式,提高存储效率;第二种挖掘状态转移的特点,比如大多数状态的下一状态只有几个不同的值,可以采用延迟转移等方法以较小的匹配速度代价节省存储空间等。专利号CN200910226279. 4 (基于有限状态自动机的字符串匹配方法及内容过滤设备)公开了一种基于有限状态自动机的字符串匹配方法及内容过滤设备,包括将DFA中符合设定条件的至少两个顺序关联的状态合并,得到合并后的DFA;相应的字符匹配过程包括从字符串数据库中依次读取字符,根据当前状态及读取的字符,判断本次匹配是否为字符串匹配;若否,根据当前状态和读取的字符跳转到下一状态;若是,则从对应的字符串存储地址获取当前状态的匹配字符串,并读取下一个字符,判断是否与匹配字符串的下一个字符匹配,当匹配时继续读取下一个字符直至字符串匹配成功时,跳转到对应的下一状态;若否,则根据当前状态和读取的字符跳转到下一状态。该方法减少了字符匹配时访问内存的次数,提高了字符匹配的速度和效率。专利号CN200910167292. 7( —种基于有限状态自动机的字符串匹配方法及装置) 公开了一种基于有限状态自动机的字符串匹配方法及装置,该方法包括确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码; 所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。上述方法,采用程序代码的形式存放 DFA,减少了系统处理时延,提高了字符匹配的速度和效率。本发明采用一种匹配系统和方法,大大减少了存储DFA状态需要的存储空间。

发明内容
本发明克服现有技术存在的不足,本发明的压缩比多数情况下更高,且匹配速度较快。本发明提供一种基于确定有限状态自动机的正则表达式匹配设备,其包括包派发器和结果收集模块,其改进之处在于,所述匹配设备包括匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接。优选的,所述匹配单元包括分别与所述结果收集模块连接的匹配模块0、所述匹配模块1、所述匹配模块2和所述匹配模块3。优选的,所述存储单元为SRAM,所述存储单元包括片内DFA存储模块和片外DFA 存储模块,所述片内DFA存储模块和所述片外DFA存储模块都分别与所述匹配单元连接;其中,所述片内DFA存储模块与所述匹配模块一一对应。优选的,所述系统使用型号为)(C5VLX110T的fpga芯片。优选的,其特征在于,所述方法包括如下步骤(1).获得当前状态的基本数据结构,若存在Labeled跳转,则取出Labeled跳转, 将当前字符与Labeled跳转包含的所有字符并行匹配,如果找到相同的,则直接获得下一状态;若不存在Labeled跳转,或者虽存在但其所有字符均与当前字符不同,则进行步骤 2 ;(2).取出当前状态的字符替换表中当前字符对应的元素,如果该元素为0,则从当前状态的基本数据结构中取得主跳转作为下一状态;否则从基本数据结构中取出简化状态表的地址,以该元素为偏移,取出下一状态;(3).如果所取得的下一状态为接收状态,则匹配成功,否则以下一状态为当前状态,返回步骤1。优选的,按照如下方法简化每个状态的转移表即只记载某一状态的下一状态数值;其中,所有重复的下一状态值只记录一次。优选的,字符替换表中每个状态有256个元素,但每个元素不再是直接的状态,而是在简化状态表中的偏移。优选的,其状态转移的过程如下,判断当前状态,将输入字符从字符替换表中得到偏移值,以该值作为偏移查简化状态表,从而得到下一状态。优选的,字符替换表做如下压缩若干个状态的字符替换表是相同的话,则共用一个。优选的,简化状态表做如下压缩若干个状态的简化状态表是相同的话,则共用一个。与现有技术相比,本发明的有益效果在于大大减少了存储DFA需要的存储空间。 或者说,在有限的空间内可以存储较多的正则表达式。此外,与现有的匹配方案相比,本发明的匹配速度较快。


图1是本发明的状态转移示意图;图2是本发明的状态转移表示意图;图3是本发明的简化状态表示意图;图4是本发明的字符替换表示意图;图5是本发明的最终的Labeled跳转、字符替换表和简化状态表示意图。图6是正则表达式匹配流程图。图7是确定有限自动机的字符匹配系统的结构示意图。
具体实施方式
通过一个正则表达式及其DFA的例子来说明关键步骤。假设正则表达式为 \$
+ (\.

) ?。该表达式的作用是识别美元数目(以$开头,后接多个数字,如果有“.”,则其后必须紧跟两个数字,比如“$12”和“$12. 34”可以成功匹配)。图1是状态转移图,图2是状态转移表。转移表共有256列(本文的字符集均以ASCII字符表为例,因此共有256个下一状态,但本发明所适用字符集不局限于ASCII表),分别对应一个字节的256个值;图中最后一列的 …表示除0 9、.、$之外的所有字母。跳转过程如下。假设处在状态C下,如果输入“$”,将进入状态B ;输入0 9之间的数值,将跳转到D状态;输入所有其他字符,将跳转到状态A。我们发现,每个状态的下一状态虽然有256个数值,但是绝大多数是相同的,不同的值只有几个。比如状态A的下一状态只有状态B和A,状态B的下一状态则只有A、B和 E。因此我们将每个状态的下一状态数值存到一个小表里,称为简化转移表。比如图2中状态转移表的简化转移表如下图3所示我们需要一种方法来将输入字符转化为简化状态表的偏移,以获得相应的下一状态。比如,假设当前状态为A,输入字符为‘$ ’,根据图2的状态转移表,很容易得到下一状态为B(图2)。压缩后,原状态表不存在,因此,我们需要一种方法将‘$’转化为图3简化状态表状态A的下一状态B的偏移,也就是1。为此,我们引入字符替换表如图4。字符替换表中每个状态也有256个元素,但每个元素不再是直接的状态,而是在简化状态表中的偏移。回到刚才的例子,当前状态为A,输入字符为‘$’,从图4字符替换表中得到偏移值为1,以该值作为偏移查简化状态表,得到状态B。图4的字符替换表还可以进一步压缩空间,虚线框内的三个状态的字符替换表是相同的(这三个状态在图2原始状态转移表中是不同的),因此它们可以共用一个。图3的简化状态表也可以类似压缩,比如状态A和F的简化状态表是相同的。更进一步,B和E的也可以合并,因为状态B的简化状态表是E的前缀。经过压缩之后的最终字符替换表和简化状态表分别示于图5的(a)和(b)。本发明利用上述技术方案压缩了存储DFA需要的存储空间,在同样有限的空间内存储了更多的正则表达式。此外,还不降低正则式的匹配速度,实现了高压缩比和高匹配速度的统一。以FPGA实现基于上述压缩方案的正则表达式匹配为例。每个状态需要一个基本数据结构来记录该状态的信息,包括Labeled跳转的地址、字符替换表地址以及简化状态表的地址。由于每个状态的字符替换表元素宽度是不同的,因此还要记录该状态字符替换表元素的位宽。此外,为了减少访存,以每个状态的具有最多字符的那个跳转作为简化状态表的第一个跳转(称为主跳转),将该跳转放在状态的基本数据结构中。因此,若访问字符替换表所得元素为0,那么只需从基本数据结构中获得主跳转,避免访问简化状态表。存储器一般都是以块为单位访问的,比如,SRAM的访问单位一般为16字节,因此, 可限制一个状态的Labeled跳转数目,确保一个块能够存储一个状态的所有Labeled跳转。状态的基本数据结构、Labeled跳转表、字符替换表以及简化状态表可以存于 FPGA的片内RAM中,也可以存于片外的RAM中。为了尽可能的提高匹配速度,将部分状态存于片内,其余状态存于片外,形成二级存储结构。由于访问片内RAM比访问片外RAM要快得多,因此将最常出现的状态存于片内,其余存于片外。以图2中状态为例,出现最多的状态为A和E,因此可将这两个状态存于片内。正则表达式匹配流程图见图6。首先获得当前状态的基本数据结构,查看是否存在Labeled跳转,如果存在,则取出Labeled跳转,将当前字符与Labeled跳转包含的所有字符并行匹配,如果找到相同的, 则直接获得下一状态。如果不存在Labeled跳转,或者虽有Labeled跳转,但其所有字符均与当前字符不同,则根据基本数据结构中的字符替换表地址以及当前字符计算当前字符对应元素的地址,取出该元素。如果该元素为0,则从当前状态的基本数据结构中取得主跳转作为下一状态。如果元素不为0,则从基本数据结构中取出简化状态表的地址,以该元素为偏移, 取出下一状态。如果所取得的下一状态为接收状态,则匹配成功,否则以下一状态为当前状态,继续上述匹配。上述匹配过程是串行的,不能充分利用存储部件的带宽,由于FPGA的天然并行性,可以采用多路并行的方式来提高匹配速度,见图7。包派发器负责将数据包派发到空闲的匹配模块,四个匹配模块完全并行工作。如前所述,压缩之后的DFA部分存于片内,部分存于片外。片内的RAM又分为四个完全相同的局部存储区,每个匹配模块的存储模块保存完全相同的状态,因此只要在片内RAM的状态间跳转,四个模块可互补干扰,完全并行。当下一状态不在片内时,才访问片外的SRAM。实验结果表明,与只采用片外的SRAM相比,该方案的匹配速度平均可提高到原来的3倍。本发明利用上述技术方案压缩了存储DFA需要的存储空间,在同样有限的空间内存储了更多的正则表达式。此外,在基于FPGA的具体实施方式
中,通过将少量的常见状态存于片内并为每个匹配模块复制一份,大大提高了正则式的匹配速度,实现了高压缩比和高匹配速度的统一。以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所述领域的普通技术人员应当理解依然可以对本发明的具体实施方式
进行修改或者同等替换,而未脱离本发明精神和范围的任何修改或者等同替换, 其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种基于确定有限状态自动机的正则表达式匹配设备,其包括包派发器和结果收集模块,其特征在于,所述匹配设备包括匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接。
2.根据权利要求1所述的系统,其特征在于,所述匹配单元包括分别与所述结果收集模块连接的匹配模块0、所述匹配模块1、所述匹配模块2和所述匹配模块3。
3.根据权利要求1所述的系统,其特征在于,所述存储单元为SRAM,所述存储单元包括片内DFA存储模块和片外DFA存储模块,所述片内DFA存储模块和所述片外DFA存储模块都分别与所述匹配单元连接;其中,所述片内DFA存储模块与所述匹配模块一一对应。
4.根据权利要求1-3所述的系统,其特征在于,所述系统使用型号为)(C5VLX110T的 fpga芯片。
5.一种基于确定有限状态自动机的正则表达式匹配方法,其特征在于,所述方法包括如下步骤(1).获得当前状态的基本数据结构,若存在Labeled跳转,则取出Labeled跳转,将当前字符与Labeled跳转包含的所有字符并行匹配,如果找到相同的,则直接获得下一状态; 若不存在Labeled跳转,或者虽存在但其所有字符均与当前字符不同,则进行步骤2 ;(2).取出当前状态字符替换表中当前字符对应的元素,如果该元素为0,则从当前状态的基本数据结构中取得主跳转作为下一状态;否则从基本数据结构中取出简化状态表的地址,以该元素为偏移,取出下一状态;(3).如果所取得的下一状态为接收状态,则匹配成功,否则以下一状态为当前状态,返回步骤1。
6.根据权利要求5所述的方法,其特征在于,按照如下方法简化每个状态的转移表即只记载某一状态的下一状态数值;其中,所有重复的下一状态值只记录一次。
7.根据权利要求5-6所述的方法,其特征在于,字符替换表中每个状态有256个元素, 但每个元素不再是直接的状态,而是在简化状态表中的偏移。
8.根据权利要求5-7所述的方法,其状态转移的过程如下,判断当前状态,将输入字符从字符替换表中得到偏移值,以该值作为偏移查简化状态表,从而得到下一状态。
9.根据权利要求5-8所述的方法,其特征在于,字符替换表做如下压缩若干个状态的字符替换表是相同的话,则共用一个。
10.根据权利要求5-9所述的方法,其特征在于,简化状态表做如下压缩若干个状态的简化状态表是相同的话,则共用一个。
全文摘要
本发明提供一种基于确定有限状态自动机的正则表达式匹配设备和方法,所述设备包括包派发器和结果收集模块,所述正则表达式匹配系统包括匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接。所述方法包括,首先将每个状态的转移表分解为字符替换表和简化状态表,分解之后,很多状态具有相同的字符替换表,这些状态间可共享;此外,很多状态有相似的字符替换表,将少数跳转提取出来后,这些状态也可共享相同的字符替换表。本发明提供的基于确定有限状态自动机的正则表达式匹配设备和方法,大大减少了存储DFA需要的存储空间,在有限的空间内可以存储较多的正则表达式。
文档编号G06F17/30GK102521356SQ20111041519
公开日2012年6月27日 申请日期2011年12月13日 优先权日2011年12月13日
发明者刘兴奎, 张英文, 李锋伟, 李静, 窦晓光 申请人:曙光信息产业(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1