CN102521356B - 基于确定有限状态自动机的正则表达式匹配设备和方法 - Google Patents
基于确定有限状态自动机的正则表达式匹配设备和方法 Download PDFInfo
- Publication number
- CN102521356B CN102521356B CN201110415194.8A CN201110415194A CN102521356B CN 102521356 B CN102521356 B CN 102521356B CN 201110415194 A CN201110415194 A CN 201110415194A CN 102521356 B CN102521356 B CN 102521356B
- Authority
- CN
- China
- Prior art keywords
- state
- character
- matching
- nextstate
- redirect
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于确定有限状态自动机的正则表达式匹配设备和方法,所述设备包括:包派发器和结果收集模块,所述正则表达式匹配***包括:匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接。所述方法包括,首先将每个状态的转移表分解为字符替换表和简化状态表,分解之后,很多状态具有相同的字符替换表,这些状态间可共享;此外,很多状态有相似的字符替换表,将少数跳转提取出来后,这些状态也可共享相同的字符替换表。本发明提供的基于确定有限状态自动机的正则表达式匹配设备和方法,大大减少了存储DFA需要的存储空间,在有限的空间内可以存储较多的正则表达式。
Description
技术领域
本发明涉及属于网络信息处理的正则表达式领域,特别涉及一种基于确定有限状态自动机的正则表达式匹配设备和方法。
背景技术
正则表达式在网络信息处理领域有广泛的应用,比如协议识别、入侵检测等。实现正则表达式匹配主要采用各种状态机,但DFA存在空间***的问题,难以支持较多正则表达式。目前采用DFA的正则表达式匹配方案有几种。一种是适当改写正则表达式,提高存储效率;第二种挖掘状态转移的特点,比如大多数状态的下一状态只有几个不同的值,可以采用延迟转移等方法以较小的匹配速度代价节省存储空间等。
专利号CN200910226279.4(基于有限状态自动机的字符串匹配方法及内容过滤设备)公开了一种基于有限状态自动机的字符串匹配方法及内容过滤设备,包括:将DFA中符合设定条件的至少两个顺序关联的状态合并,得到合并后的DFA;相应的字符匹配过程包括:从字符串数据库中依次读取字符,根据当前状态及读取的字符,判断本次匹配是否为字符串匹配;若否,根据当前状态和读取的字符跳转到下一状态;若是,则从对应的字符串存储地址获取当前状态的匹配字符串,并读取下一个字符,判断是否与匹配字符串的下一个字符匹配,当匹配时继续读取下一个字符直至字符串匹配成功时,跳转到对应的下一状态;若否,则根据当前状态和读取的字符跳转到下一状态。该方法减少了字符匹配时访问内存的次数,提高了字符匹配的速度和效率。
专利号CN200910167292.7(一种基于有限状态自动机的字符串匹配方法及装置)公开了一种基于有限状态自动机的字符串匹配方法及装置,该方法包括:确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。上述方法,采用程序代码的形式存放DFA,减少了***处理时延,提高了字符匹配的速度和效率。
本发明采用一种匹配***和方法,大大减少了存储DFA状态需要的存储空间。
发明内容
本发明克服现有技术存在的不足,本发明的压缩比多数情况下更高,且匹配速度较快。
本发明提供一种基于确定有限状态自动机的正则表达式匹配设备,其包括:包派发器和结果收集模块,其改进之处在于,所述匹配设备包括:匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接。
优选的,所述匹配单元包括分别与所述结果收集模块连接的匹配模块0、所述匹配模块1、所述匹配模块2和所述匹配模块3。
优选的,所述存储单元为SRAM,所述存储单元包括:片内DFA存储模块和片外DFA存储模块,所述片内DFA存储模块和所述片外DFA存储模块都分别与所述匹配单元连接;其中,所述片内DFA存储模块与所述匹配模块一一对应。
优选的,所述***使用型号为XC5VLX110T的fpga芯片。
优选的,其特征在于,所述方法包括如下步骤:
(1).获得当前状态的基本数据结构,若存在Labeled跳转,则取出Labeled跳转,将当前字符与Labeled跳转包含的所有字符并行匹配,如果找到相同的,则直接获得下一状态;若不存在Labeled跳转,或者虽存在但其所有字符均与当前字符不同,则进行步骤2;
(2).取出当前状态的字符替换表中当前字符对应的元素,如果该元素为0,则从当前状态的基本数据结构中取得主跳转作为下一状态;否则从基本数据结构中取出简化状态表的地址,以该元素为偏移,取出下一状态;
(3).如果所取得的下一状态为接收状态,则匹配成功,否则以下一状态为当前状态,返回步骤1。
优选的,按照如下方法简化每个状态的转移表:即只记载某一状态的下一状态数值;其中,所有重复的下一状态值只记录一次。
优选的,字符替换表中每个状态有256个元素,但每个元素不再是直接的状态,而是在简化状态表中的偏移。
优选的,其状态转移的过程如下,判断当前状态,将输入字符从字符替换表中得到偏移值,以该值作为偏移查简化状态表,从而得到下一状态。
优选的,字符替换表做如下压缩:若干个状态的字符替换表是相同的话,则共用一个。
优选的,简化状态表做如下压缩:若干个状态的简化状态表是相同的话,则共用一个。
与现有技术相比,本发明的有益效果在于:大大减少了存储DFA需要的存储空间。或者说,在有限的空间内可以存储较多的正则表达式。此外,与现有的匹配方案相比,本发明的匹配速度较快。
附图说明
图1是本发明的状态转移示意图;
图2是本发明的状态转移表示意图;
图3是本发明的简化状态表示意图;
图4是本发明的字符替换表示意图;
图5是本发明的最终的Labeled跳转、字符替换表和简化状态表示意图。
图6是正则表达式匹配流程图。
图7是确定有限自动机的字符匹配***的结构示意图。
具体实施方式
通过一个正则表达式及其DFA的例子来说明关键步骤。假设正则表达式为:\$[0-9]+(\.[0-9][0-9])?。
该表达式的作用是识别美元数目(以$开头,后接多个数字,如果有“.”,则其后必须紧跟两个数字,比如“$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的具体实施方式中,通过将少量的常见状态存于片内并为每个匹配模块复制一份,大大提高了正则式的匹配速度,实现了高压缩比和高匹配速度的统一。
以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所述领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者同等替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。
Claims (2)
1.一种基于确定有限状态自动机的正则表达式匹配设备,其包括:包派发器和结果收集模块,其特征在于,所述匹配设备包括:匹配单元和与其连接的存储单元;所述匹配单元分别与所述包派发器和所述结果收集模块连接;
所述匹配单元包括分别与所述结果收集模块连接的匹配模块0、匹配模块1、匹配模块2和匹配模块3;
所述存储单元为SRAM,所述存储单元包括:片内DFA存储模块和片外DFA存储模块,所述片内DFA存储模块和所述片外DFA存储模块都分别与所述匹配单元连接;其中,所述片内DFA存储模块与所述匹配模块一一对应;
所述包派发器将数据包派发到空闲的匹配模块,四个匹配模块完全并行工作;压缩之后的DFA部分存于片内,部分存于片外;片内的RAM又分为四个完全相同的局部存储区,每个匹配模块的存储模块保存完全相同的状态,因此只要在片内RAM的状态间跳转,四个模块可互不干扰,完全并行,当下一状态不在片内时,才访问片外的SRAM;
所述设备使用下述方法,具体包括如下步骤:
(1).获得当前状态的基本数据结构,若存在Labeled跳转,则取出Labeled跳转,将当前字符与Labeled跳转包含的所有字符并行匹配,如果找到相同的,则直接获得下一状态;若不存在Labeled跳转,或者虽存在但其所有字符均与当前字符不同,则进行步骤2;
(2).取出当前状态字符替换表中当前字符对应的元素,如果该元素为0,则从当前状态的基本数据结构中取得主跳转作为下一状态;否则从基本数据结构中取出简化状态表的地址,以该元素为偏移,取出下一状态;
(3).如果所取得的下一状态为接收状态,则匹配成功,否则以下一状态为当前状态,返回步骤1;
按照如下方法简化每个状态的转移表:即只记载某一状态的下一状态数值;其中,所有重复的下一状态值只记录一次;
字符替换表中每个状态有256个元素,但每个元素不再是直接的状态,而是在简化状态表中的偏移;
其状态转移的过程如下,判断当前状态,将输入字符从字符替换表中得到偏移值,以该值作为偏移查简化状态表,从而得到下一状态;
字符替换表做如下压缩:若干个状态的字符替换表是相同的话,则共用一个;
简化状态表做如下压缩:若干个状态的简化状态表是相同的话,则共用一个;
所述状态的基本数据结构、Labeled跳转表、字符替换表以及简化状态表存于FPGA的片内RAM中,或者存于片外的RAM中。
2.根据权利要求1所述的设备,其特征在于,所述设备使用型号为XC5VLX110T的FPGA芯片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110415194.8A CN102521356B (zh) | 2011-12-13 | 2011-12-13 | 基于确定有限状态自动机的正则表达式匹配设备和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110415194.8A CN102521356B (zh) | 2011-12-13 | 2011-12-13 | 基于确定有限状态自动机的正则表达式匹配设备和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521356A CN102521356A (zh) | 2012-06-27 |
CN102521356B true CN102521356B (zh) | 2015-04-01 |
Family
ID=46292270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110415194.8A Active CN102521356B (zh) | 2011-12-13 | 2011-12-13 | 基于确定有限状态自动机的正则表达式匹配设备和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521356B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103854056B (zh) * | 2014-03-17 | 2016-11-16 | 清华大学 | 正则表达式分组方法及装置 |
CN106156006B (zh) * | 2016-07-05 | 2019-07-23 | 尼玛扎西 | 藏文字成分分析方法、藏文排序方法以及对应装置 |
CN106980653B (zh) * | 2017-03-03 | 2019-07-12 | 清华大学 | Dfa压缩方法及装置、正则表达式匹配方法及*** |
CN109492218B (zh) * | 2018-10-22 | 2023-03-21 | 浪潮软件股份有限公司 | 一种基于确定有穷状态机的同义词快速替换方法 |
CN110324204B (zh) * | 2019-07-01 | 2020-09-11 | 中国人民解放军陆军工程大学 | 一种在fpga中实现的高速正则表达式匹配引擎及方法 |
CN113010749A (zh) * | 2019-12-19 | 2021-06-22 | 上海复旦微电子集团股份有限公司 | 正则表达式匹配*** |
CN113703715B (zh) * | 2021-08-31 | 2024-02-23 | 深信服科技股份有限公司 | 一种正则表达式匹配方法、装置、fpga及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7689530B1 (en) * | 2003-01-10 | 2010-03-30 | Cisco Technology, Inc. | DFA sequential matching of regular expression with divergent states |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
-
2011
- 2011-12-13 CN CN201110415194.8A patent/CN102521356B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7689530B1 (en) * | 2003-01-10 | 2010-03-30 | Cisco Technology, Inc. | DFA sequential matching of regular expression with divergent states |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
Non-Patent Citations (1)
Title |
---|
正则表达式匹配的高效硬件实现;孙志刚 等;《计算机工程与科学》;20091031;第31卷(第10期);5-7,22 * |
Also Published As
Publication number | Publication date |
---|---|
CN102521356A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521356B (zh) | 基于确定有限状态自动机的正则表达式匹配设备和方法 | |
CN103559217B (zh) | 一种面向异构数据库的海量组播数据入库实现方法 | |
CN108595621B (zh) | 一种虚开增值税***的预警分析方法及*** | |
CN101876986B (zh) | 基于有限状态自动机的字符串匹配方法及内容过滤设备 | |
CN101625703B (zh) | 一种内存数据库的日志合并方法和*** | |
CN107818120A (zh) | 基于大数据的数据处理方法和装置 | |
CN103377100B (zh) | 一种数据备份方法、网络节点及*** | |
CN102968339B (zh) | 基于云计算架构实现复杂事件处理的***及其方法 | |
CN101582081A (zh) | 一种数据比对的方法及装置 | |
CN101707513B (zh) | 基于正则表达式的深度包检测方法及设备 | |
CN102893265A (zh) | 管理可独立访问的数据单元的存储 | |
CN110489407A (zh) | 数据补采方法、装置、计算机设备及存储介质 | |
CN112118174A (zh) | 软件定义数据网关 | |
CN104298736A (zh) | 数据集合连接方法、装置及数据库*** | |
CN107870982A (zh) | 数据处理方法、***和计算机可读存储介质 | |
CN106503008A (zh) | 文件存储方法和装置及文件查询方法和装置 | |
CN115665284A (zh) | 基于分布式配置中心的报文处理方法、装置及计算机设备 | |
CN104750814B (zh) | 基于多传感器的多元异构数据流自动入库方法 | |
CN103095595B (zh) | 一种基于单向并行多链表的网络数据管理方法及*** | |
CN110135954A (zh) | 在线产业链构建应用*** | |
CN106815950B (zh) | 一种基于单模块的智慧柜员机驱动方法及其*** | |
CN115114289A (zh) | 一种数据查询方法、装置及电子设备 | |
CN106599326A (zh) | 一种云化架构下的记录数据剔重处理方法及*** | |
CN101799803A (zh) | 信息处理方法、模块及*** | |
KR102636239B1 (ko) | 인-메모리 기반 이상징후 실시간 분석시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220728 Address after: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing Patentee after: Dawning Information Industry (Beijing) Co.,Ltd. Patentee after: DAWNING INFORMATION INDUSTRY Co.,Ltd. Address before: 100084 Beijing Haidian District City Mill Street No. 64 Patentee before: Dawning Information Industry (Beijing) Co.,Ltd. |
|
TR01 | Transfer of patent right |