CN102142009B - 一种正则表达式匹配的方法及装置 - Google Patents

一种正则表达式匹配的方法及装置 Download PDF

Info

Publication number
CN102142009B
CN102142009B CN 201010580832 CN201010580832A CN102142009B CN 102142009 B CN102142009 B CN 102142009B CN 201010580832 CN201010580832 CN 201010580832 CN 201010580832 A CN201010580832 A CN 201010580832A CN 102142009 B CN102142009 B CN 102142009B
Authority
CN
China
Prior art keywords
character
state
type
nextstate
data
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.)
Expired - Fee Related
Application number
CN 201010580832
Other languages
English (en)
Other versions
CN102142009A (zh
Inventor
徐敏锋
付饶
时立峰
段国莲
程贵锋
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN 201010580832 priority Critical patent/CN102142009B/zh
Publication of CN102142009A publication Critical patent/CN102142009A/zh
Application granted granted Critical
Publication of CN102142009B publication Critical patent/CN102142009B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供了一种正则表达式匹配的方法及装置,该方法包括:输入待匹配报文及DFA状态表,DFA状态表包括状态迁移表,其包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系;判断当前状态对应的数据类型,包括单个字符Char型和多个字符Str型,Str型对应的数据为连续的多个字符;若是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至符合匹配条件的下一状态;若是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至符合匹配条件的下一状态;当下一状态为接受态时,结束匹配过程并输出匹配成功结果。该方法匹配速度快、效率高,DFA表项占用的存储空间小。

Description

一种正则表达式匹配的方法及装置
技术领域
本发明涉及数据处理领域,具体地涉及一种正则表达式匹配的方法及装置。
背景技术
正则表达式(Regular Expression)是一种用来描述特定字符串的工具。其语法丰富,可以准确而灵活地描述各种复杂特征的字符串。正则表达式引擎则可以根据正则表达式描述的特征,从给定的字符串集合中找出符合该特征的字符串子集。
正则表达式引擎有非常广泛的用途,例如文本的查找替换,文件检索等。完成特定内容识别过滤,网络监听,协议识别,流量侦测和流量控制,攻击防护,病毒检测等功能。
通常可以把正则表达式编译生成NFA(Nondeterministic Finite Automaton,非确定性有限自动机)或DFA(Deterministic Finite Automaton,确定性有限自动机),再用软件或硬件实现NFA引擎,然后用这个NFA引擎根据前面编译出来的NFA数据去查找待匹配的报文。
发明人在实现本发明的过程中发现,现有技术至少存在以下不足:
NFA引擎以正则表达式为主导,查找时需要回溯,所以它可能多次取同一数据跟正则表达式的不同部分比较。因此,在需要回溯的情况下它的执行速度可能非常慢。
因为DFA表在规则比较复杂时(比如有多个.*)的情况,其中.表示任意字符,*表示出现任意次数,该DFA表项比较大,占用大量的储存空间,所以DFA引擎在处理这种DFA表时匹配速度也会比较慢。大量的正则表达式一起编译,储存空间会达到GB级别。
发明内容
本发明实施例提供一种正则表达式匹配方法及装置,以获得更快的匹配速度,并降低DFA表项所占用的存储空间。
一方面,本发明实施例提供了一种正则表达式匹配的方法,包括:输入待匹配报文及确定性有限自动机DFA状态表,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态;判断当前状态对应的数据类型,所述数据类型包括单个字符Char型和多个字符Str型,所述Str型对应的数据为连续的多个字符;如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
另一方面,本发明实施例提供了一种正则表达式匹配的装置,包括:报文及DFA表载入单元,用于输入待匹配报文及确定性有限自动机DFA状态表,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态;查找单元,包括数据类型确定模块、匹配模块及输出模块;所述数据类型确定模块,用于判断当前状态对应的数据类型,所述数据类型包括单个字符Char型和多个字符Str型,所述Str型对应的数据为连续的多个字符;所述匹配模块,用于如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;所述输出模块,用于当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
本发明实施例的有益效果在于:本发明实施例提供的正则表达式的匹配方法,通过将待匹配数据的数据类型分为Char型和Str型,并根据不同的数据类型分别执行不同的匹配处理过程。对于Str型数据,是当该Str型所包含的多个字符全部匹配成功后才迁移到下一状态,从而节省了迁移边,使状态迁移表需要记录的状态减少,可以极大地减小状态迁移表所占用的储存空间,并提高匹配速度与匹配效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1的正则表达式匹配方法的整体流程图;
图1A为本发明实施例1作为一个举例的编译成DFA表后各个状态间的关系示意图;
图2为本发明实施例1的作为一个举例的字符映射表的数据结构示意图;
图3为本发明实施例1的一种状态属性表的结构示意图;
图4为本发明实施例1的状态迁移表的结构示意图;
图4A为本发明实施例1图4的状态迁移表中Str型属性数据结构的示意图;
图4B为本发明实施例1图4的状态迁移表中Rep型属性数据结构的示意图;
图5为本发明实施例1作为又一个举例的字符映射表的结构示意图;
图6为本发明实施例1作为举例的一个状态属性表的示意图;
图7为本发明实施例1的作为一个举例的状态迁移表的示意图;
图8为本发明实施例2的正则表达式匹配装置的功能框图;
图9为本发明实施例2的图8所示正则表达式匹配装置的工作流程图;
图10为本发明实施例2的图8所示的查找单元的详细工作流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,由于本发明实施例使用的DFA表是一种由正则表达式编译出来的二进制数据,所以可以查找的数据包括所有可以用二进制表示的内容,例如纯粹的二进制数据,美国信息交换标准代码(American Standard Code for Information Interchange,ASCII),统一码(UNICODE)等等。而这些格式的数据都可能出现在现有的报文里面,为了简化起见,以下将待查找或匹配的数据简称为报文。而一个字节的二进制数据总能用一个等效的字符表示(不管是否可打印字符),所以本发明实施例中把待查找数据中的单字节数据简称为字符,多个单字节数据组合在一起称为字符串。
实施例1:
本发明实施例1提供了一种正则表达式匹配的方法。图1为本发明实施例1的正则表达式匹配方法的整体流程图。如图1所示,该方法的执行主体是本发明实施例提供的一种正则表达式匹配装置,该方法包括如下步骤:
步骤100、载入待匹配报文及确定性有限自动机DFA状态表,该DFA状态表包括状态迁移表,该状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,上述迁移关系包括匹配条件及符合匹配条件的下一状态。上述的地址是指某个状态所对应的数据在存储介质,例如缓存,中储存的起始位置。
步骤102、判断当前状态对应的数据类型,数据类型包括单个字符型(character型,简称为Char型)和多个字符型(string型,简称为Str型),Str型对应的数据为连续的多个字符。如果为Str型,执行步骤104,如果为Char型,执行步骤106。
具体地,以下举例说明Char型和Str型。例如,对于正则表达式:/test\s*abc/(两个“/”之间的部分表示正则表达式,以下同),第一个字符t总是分类为Char型,est为连续出现的多个字符,分类为Str型,通配符“\s*”表示“空格”、“回车”、“下一行”出现一次、一次以上的任意次数或者不出现,即出现的次数不确定,则将位于报文中间的出现次数不确定的单个字符分类为Char型,abc为连续出现且不重复的多个字符,分类为Str型。
步骤104、如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
步骤106、如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
步骤108、当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
以下对本发明实施例中的“当前状态”和“下一状态”进一步进行详细说明。为了便于理解,直接使用字符作为迁移条件,此外,以下将本发明实施例的正则表达式匹配装置简称为引擎。
例如正则表达式/^AB/,表示的匹配条件是:待匹配数据的第一个字节必须是大写字母A,第二个字节是大写字母B,才能匹配成功;否则匹配失败。
编译成DFA表后各个状态间的关系如图1A所示。其中圆圈表示状态号,箭头表示状态迁移,箭头边的字符表示迁移条件。
图1A中,一共有0~3四个状态,其中状态3是接受态,状态0是失败态。状态1和状态2是中间态。
引擎开始工作时,状态号初始化为1。初始状态(状态1)对应的迁移关系数据必须储存在确定的空间,为了方便,一般储存在起始地址为1的储存空间。这时,则称状态1为“当前状态”,引擎从待匹配数据里面取第一个字节,根据状态1所在的起始地址从状态迁移表取出状态1的迁移关系数据,然后引擎比较并判断待匹配数据的第一个字节是“A”还是“非A”。如果是“A”,则得知将迁移到状态2(实际得到的是状态2的迁移关系数据所在的起始地址),这时状态2称为“下一状态”;如果是“非A”,则得知将迁移到状态0(实际得到的也是状态0的迁移关系数据所在的起始地址,由于是失败态,引擎不需要实际迁移到这个状态),这时状态0称为“下一状态”。
接着引擎“迁移到”状态2,状态2称为“当前状态”。这时候再取待匹配数据的第二个字节,并根据状态2所在的起始地址从状态迁移表取出状态2的迁移关系数据,然后引擎比较并判断待匹配数据的第一个字节是“B”还是“非B”。如果是“B”,则得知将迁移到状态3(实际得到的是状态3的迁移关系数据所在的起始地址,由于是个接受态,引擎不需要实际迁移到这个状态),这时状态3称为“下一状态”;如果是“非A”,则得知将迁移到状态0(实际得到的也是状态0的迁移关系数据所在的起始地址,由于是失败态,引擎不需要实际迁移到这个状态),这时状态0称为“下一状态”。
总之:根据“某个状态”对应的迁移关系数据来对“待匹配数据”进行比较并确定将迁移到“另一个状态”,则“某个状态”称为“当前状态”,得出的“另一个状态”称为“下一状态”。值得指出的是,如果是“当前状态”刚好是一个循环的状态,则“下一状态”会等于“当前状态”。
本发明实施例图1所示方法,通过将待匹配数据的数据类型分为Char型和Str型,并根据不同的数据类型分别执行不同的匹配处理过程。对于Str型数据,是当该Str型所包含的多个字符全部匹配成功后才迁移到下一状态,从而节省了迁移边,使状态迁移表需要记录的状态减少,可以极大地减小状态迁移表所占用的储存空间,并提高匹配速度与匹配效率。
进一步地,在本发明实施例的一较佳实施方式中,DFA状态表中还包括字符映射表,该字符映射表中包括字符值与映射值之间的映射关系。在该映射关系中,可以将一个或多个字符值与一个映射值建立映射关系,或者,将一类相同类型的字符映射成一个映射值。
图2为本发明实施例的作为一个举例的字符映射表的数据结构示意图。如图2所示,字符映射表保存报文字符与字符映射值之间的映射关系。图2示例性给出的字符值与映射之间的映射关系包括:将ASCII码值为0-96、100、102-255的多个字符值映射成映射值0,将ASCII码值为97-98的多个字符值映射成映射值1,将ASCII码值为99的字符值映射成映射值2,将ASCII码值为101的字符值映射为3。当然,对应于不同的DFA表,可以采用不同的字符映射表。图1中步骤106的处理过程具体可以包括如下步骤:将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理。
此外,字符映射表还可以把一类相同类型的字符映射为一个映射值。举例如下:规则/a\s?[a-z]+/表示的是字母a后面跟着0个或多个空格,其后再跟着一个或多个小写字母。生成字符映射表时,会把字符a映射成一个值(例如1);空格对应的字符映射成另一个值(例如2);字母a至z之间的字母映射成又一个值(例如3);不属于前面三种情况的字符都映射成另一个值(例如0)。
DFA状态表在从一个状态迁移到另一个状态时,可能会有多个不同的迁移边(即迁移所对应的字符)。如果把每个迁移边都分别记录,则表项数据会很大,不方便硬件实现。所以本发明实施例较佳地采用了字符映射的方法,利用字符映射表将字符做一次映射,并把这些有相同迁移方向的迁移边(字符)映射到同一个映射值上去。然后用映射值代替字符作为迁移边,并记录在状态迁移表中,同时记录字符映射表。这样可以极大地减小状态迁移表所占用的储存空间。例如/[a-z]/,如果在迁移表中直接用字符作为迁移边,则要记录a~z共26种迁移情况;而使用字符映射表之后,把a~z都映射成同一个映射值,并用这个映射值作为迁移边,则只需要记录一个迁移边,有利于缩小DFA状态表项。需要说明的是,术语“字符”不仅限于ASCII码字符,ASCII码外的格式也支持,例如中文字符,日文,TLV(Tag Length Value,标签,长度,数值)等格式。
进一步地,在本发明实施例的另一较佳实施方式中,对数据类型进一步进行了细分,增加了一种数据类型:重复字符Rep型,该Rep型对应的数据为连续出现多次的属于一定范围内的多个字符。以下举例详细说明Rep型数据。
例如:在正则表达式/test\s*[0-9]{5}/中,第一个字符t总是分类为单个字符Char型,\s*表示任意个数的空格,也分类为单个字符型,est分类为多个字符Str型,[0-9]{5}表示0至9之间的数字连续出现5次,则分类为重复字符Rep型。又例如:/tel:[0-9]{3}-?[0-9]{8}[a-z]{100}/,第一个字符t和-都编译成单个字符Char型,通配符“-?”,表示?出现的次数为0次或者1次,el:这三个字符则编译成多个字符Str型,[0-9]{3}、[0-9]{8}和[a-z]{100}则编译成重复字符Rep型。
进一步地,在本发明实施例的又一较佳实施方式中,在DFA状态表中增加了状态属性表,根据该状态属性表可以更好地区分上述三种数据类型,特别是在正则表达式较为复杂的情况下。图3为本发明实施例的状态属性表的结构示意图。如图3所示,各个数据域的定义分别为:第一地址阈值Str_min:当状态地址大于或等于Str_min时,表示该状态属于Str型数据;第二地址阈值Rep_min:当状态地址大于或者等于Rep_min且小于Str_min时,表示该状态属于Rep型数据;另外,如果状态地址小于Rep_min,则表示当前状态对应的数据类型是Char型;Lower:输入字符大小写转换标记,举例来说,为1表示不区分大小写,在做数据比较时,可以统一转为小写值进行比较。需要说明的是,各字段长度(比特数)可根据正则表达式的规则复杂度进行灵活设置。状态属性表包含了DFA状态表相关的参数信息,可以用于确定状态迁移表中的数据处理类型及大小写是否敏感。
需要说明的是,在图2和图3给出的较佳实施例中,DFA状态表是由正则表达式DFA表编译器生成,该编译器会对正则表达式分析编译出来的原始DFA状态表做进一步分析,生成三个子表:状态属性表、字符映射表和状态迁移表。本发明实施例中的正则表达式匹配装置从正则表达式DFA表编译器中获得上述三个子表。具体地,为了简化正则表达式匹配装置的处理流程,进一步压缩状态迁移表所占用的储存空间,上述编译器将状态迁移表数据分成上述三种类型:Char型、Str型、Rep型(只区分数据类型,不拆分表项)。
以下对本发明的一较佳实施例中DFA表包含的状态迁移表进行更为详细的说明。
图4为本发明实施例1的状态迁移表的结构示意图。虽然图4仅示出了一行地址,但实际情况下图4中的地址也可以分成多行。如图4所示,状态迁移表保存的是DFA的每个状态在输入某个/某些字符时可以迁移到的下一个状态的地址,以及该状态的Rep/Str属性数据。如果该状态无Rep/Str属性,则该迁移数据不含Rep/Str属性数据域,只有Nextst_0~Nextst_n。其中,NextSt_0,…,NextSt_n表示状态机接收字符映射值为0,…,n的字符对应的下一个迁移状态地址,映射值较佳地为连续的数字,有利于节省存储DFA表的空间。例如,假设映射值设置为0、1、2,上述映射值在存储空间中连续依次存储,只需要三个存储位置;而如果映射值取不连续的1、3、5,则上述映射值在存储空间中相应的是间隔存储,中间会额外多占用2个空余的存储位置,一共占用5个存储位置,这样就会浪费存储空间,而且采用不连续的映射值还可能需要增加相应的解析算法,导致处理复杂度增加,而采用连续的映射值既可以节省存储空间还可使处理算法的复杂度降低。
以下配合图4A和图4B对Str型的数据和Rep型的数据分别进行详细说明。
图4A为本发明实施例1的Str型属性数据结构的示意图。如图4A所示,Str型的数据表示该状态是多个字符型状态,需要匹配字符串后进行状态迁移。若匹配过程中失败,则从失败处取该字符的映射值按照状态迁移表进行迁移。数据说明如下:StrExitSt字段:字符串匹配完毕后的迁移至下一状态的地址;StrLen:字符串占用字符个数n1,其中,n1为正整数;String:字符串的字符值。需要说明的是,各字段长度(比特数)可根据正则表达式的规则复杂度进行灵活设置。
图4B为本发明实施例1的Rep型属性数据结构的示意图。如图4B所示,对于Rep型的数据,在匹配时判断一类字符的重复次数,计数达到预定次数次后迁移到指定状态,中途若失败则按照状态迁移表进行状态迁移。数据说明:RepExitSt字段:该Rep型数据匹配成功后迁移至下一状态的地址;Count字段:相同类型字符的重复次数n2,其中,n2为正整数。Mask字段:Rep型数据的字符集合映射值的掩码,用来表示当前字符的映射值是否在预定范围之内,若是,则进行计数器,直到达到预定计数值。上述掩码值由本发明实施例的正则表达式匹配装置从正则表达式DFA表编译器处获得。以下通过举例来说明MASK值的生成方法或规则。假设Rep型数据[A-C]{5},其表示A-C范围内的字符重复出现5次,再假设字符映射表中将A、B、C分别一一映射为映射值0、1、2,当然根据字符映射表的设置,可以将多个字符映射成一个映射值,然后,根据映射值将Mask字段中与映射值对应的比特位置1,即将mask值的bit0、bit1、bit2均置为1,这样就得到了mask值为0x07。在上述处理过程可以看出,本发明实施例是用一个bit位来代替一个映射值,mask值是由上述映射值所构成,这种处理方法进一步地降低了映射值所占的存储空间。
以下举例说明如何根据mask值来确定映射值是否为有效范围内的映射值的处理过程:例如,mask值为0x09,即二进制的1001,bit3和bit0有效(为1),则表示映射值为0和3的字符为预定范围内的字符,而bit1和bit2所对应的映射值1、2不是有效的映射值,其所对应的字符并非预定范围内的字符。又例如mask值为0x7,即二进制的111,bit2、bit1和bit0都有效(为1),则表示映射值为0、1和2的字符为预定范围内的字符。
在匹配处理的过程中,对于不同的数据类型,分别按照以下方式进行匹配处理。
一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的下一状态包括:Char型数据匹配条件以及符合Char型数据匹配条件的下一状态;其中,Char型数据匹配条件包括预先配置的Char型数据的映射值,符合匹配条件的下一状态是对应于预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址。这种情况下的处理过程是:如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态。
另一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址还进一步包括Str型数据匹配条件以及符合Str型数据匹配条件的下一状态;其中,Str型数据匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成后迁移至下一状态的地址。在这种情况下,对于Str型数据的处理过程包括:将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态。
还一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址还进一步包括Rep型数据匹配条件以及符合Rep型数据匹配条件的下一状态;其中,所述Rep型数据匹配条件包括:存储于Count字段中的重复次数n2,其中,n2为正整数;以及存储于Mask字段中的掩码;所述符合Rep型数据匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址。在这种情况下,对于Rep型数据的处理过程包括:如果当前状态对应的数据类型是Rep型,将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在所述掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态。
又一种情况,如果状态迁移表中保存的匹配条件及符合匹配条件的迁移地址包括上述三种类型时,其处理过程可将上述三种处理方法结合。
可选地,图1所示方法还可以进一步包括步骤:如果在Str型数据或者Rep型数据的匹配过程中发生不匹配的情形,则获取该不匹配的字符对应的映射值,根据映射值和当前状态的状态号,查询状态迁移表得出下一状态地址,并迁移到下一状态。可选地,图1所示方法还可以进一步包括如下步骤:当下一状态为失败态时,结束匹配过程并输出匹配失败结果;或者,当下一状态既不是接受态也不是失败态,并且当前匹配的字符是待匹配报文的最后一个字符时,结束匹配过程并输出匹配失败结果。具体地,判断下一状态是何种状态可依据下列处理步骤:当下一状态的地址大于或等于预设的接受态地址阈值时,确定下一状态为接受态;当下一状态的地址大于预设的失败态地址阈值且小于预设的接受态地址阈值时,确定下一状态为中间态;当下一状态的地址等于预设的失败态地址阈值时,确定下一状态为失败态。此外,可选的,在采用地址阈值区分中间态和接受态,并且也采用地址阈值区分Str型、Char型和Rep型数据时,可以将中间态的地址阈值再分为Str型、Char型和Rep型数据三段地址阈值,失败态和接受态可以不区分数据类型,当下一状态为接受态但还有字符需要匹配时,可以跳转到相应的中间态继续进行匹配过程。本领域普通技术人员可以理解,采用地址阈值区分数据类型和状态类型仅仅是本发明的一种具体实现方式,此外也可以直接将数据类型和状态类型写在DFA状态表中,或者另外单独维护数据类型和状态类型,对于数据类型还可以直接采取默示的方式,即当DFA状态表的相应表项中有Char型或Rep型数据时优先尝试匹配Char型或Rep型数据。
可选地,在图1所示方法中,可以将待匹配报文的第一个字符处理为Char型数据。
以下对本发明实施例的方法达到的提高匹配速度的优点进行详细说明。
本发明实施例采用了字符映射的方法,把在某个当前状态下,迁移到某个下一状态的多个作为迁移条件的字符映射为一个单一的映射值,而且不同状态之间的迁移条件相同时,可以共用一个映射值。通过减少迁移边,在正则表达式比较复杂的情况下可以减少了状态迁移表所占的储存空间。例如,在状态迁移表的空间远远大于字符映射表的情况下,所增加的字符是映射表的空间较小,其所增加的存储空间相比于其所能节省的存储空间小得多,这样就达到了减少状态迁移表所占储存空间的目的。
另外,本发明实施例还将状态迁移表数据分为Char型、Str型和Rep型数据。Char型数据用映射值确定作为迁移条件,可以节省储存空间。Str型数据把通常技术中的DFA表中一长串字符合成一个迁移条件,原始DFA表中这一长串字符对应的多个状态也就合成一个状态,这样可以明显减少迁移关系数据所占的储存空间。另外正如前面对图1A中所述,状态发生迁移时,需要重新计算状态迁移表的访问地址,并根据这个新的地址从状态迁移表取出新的匹配条件才能进行比较和判断,所以减少状态的数量也就是减少了引擎做状态迁移所需的的时间,提高了匹配的速度。Rep数据把多个相同的迁移条件的状态合并成一个状态,减少了状态迁移所需的时间,提高了匹配速度;本发明实施例还使用了映射值构成的掩码(mask),使用映射值以及采用掩码来表示映射值的方法可以减少迁移条件所占的储存空间。
DFA表所占的储存空间小,则引擎可以用更小的数据位宽。而在其他条件相同的情况下,数据位宽小的装置能比数据位宽大的装置运行速度更快,效率更高。
进一步地,以下以正则表达式/^test[0-9]{5}/si为例,进一步详细说明本发明实施例1的正则表达式匹配方法。需要注意的是,实际情况下DFA编译器可能同时编译多个正则表达式,以下是为了描述方便仅说明了其中一条正则表达式。
图5为本发明实施例1的作为又一个举例的字符映射表的结构示意图。编译时,依据图5所示的字符映射表,把[0-9]对应的ASCII码值映射为1,t(ASCII值为116)和T(ASCII值为84)映射为2,其余字符映射为0。图6为本发明实施例1作为举例的一个状态属性表的示意图,其中Rep_min为0x2,Str_min为0x5,Lower为0x1。根据图6可知,状态所在的地址大于或者等于0x5则属于Str类型的数据,状态所在的地址在大于等于0x2且小于0x5则属于Rep类型的数据,状态所在的地址小于0x2则为Char类型的数据。
图7为本发明实施例1的状态迁移表的一个示例图,如图7所示,该状态迁移表中一共含有3个状态。第一行的0,1,2表示映射值,state x表示状态号,state1表示状态1,state2表示状态2,state3表示状态3。其中状态1是Char型的数据;状态2有Mask域,是Rep型数据,且状态2中Mask值为0x2,即二进制的10,bit1有效,bit0无效,表示当待匹配字符的映射值为1时在该Mask值的范围之内,Count字段取值为5,表示重复次数为5次,且RepExitSt字段的指示的地址是预先配置的0x01F8;状态3有string域,是Str型数据,字符长度为3个,String字段中存储了用于匹配的0x65、0x73、0x74,分别对应于e、s、t,且StrExitSt字段的指示的地址是0x0002。
假设输入的待查找匹配的报文为Test123456789。正则表达式匹配装置开始查找时,将当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符T对应的映射值,根据图5示出的映射表可知映射值为2。然后,根据映射值2查询当前状态(state1)对应的状态迁移表,如图7所示,state1下映射值为2时对应的下一状态地址是0x0005,而0x0005为state3的存储地址,于是从state1迁移到state3。然后,判断state3所对应的数据类型,由于state3的地址0x0005等于Str_min,所以可知是Str类型的数据。接着,依次读取待查找报文中的e,s,t,并跟状态迁移表中地址0x0005对应的string字段存储的0x65:e,0x73:s,0x74:t进行比较,比较后发现三个字符都相等,于是迁移到StrExitSt字段指示的迁移地址0x0002,即从state3迁移到state2。接着,判断state2的数据类型,由于state2的地址0x0002处于Rep_min(0x0002)和Str_min(0x0005)之间,则确定状态2属于Rep类型的数据,于是依次读入字符1,2,3,4,5的映射值,根据图5可知,字符1-5的映射值都为1,而掩码Mask值为0x02,即bit1为1,bit1为有效位,所以1-5的映射值在掩码Mask值的范围之内,满足循环5次的条件,得到Exit_st字段指示的地址0x1F8作为下一个状态所在的地址,发现是一个接受态(大于或等于接受态阈值),于是整个正则表达式匹配成功。
假设输入的待查找匹配的报文为West123456789。正则表达式匹配装置开始查找时,将当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符W对应的映射值,根据图5示出的映射表可知映射值为0。然后,根据映射值0查询当前状态(state1)对应的状态迁移表,得到下一状态的地址为0x0,于是迁移到下一状态,然后,判断该下一状态为失败态,因此整个正则表达式匹配失败,输出匹配失败的结果。
假设输入的待查找匹配的报文为Tbst12345。正则表达式匹配装置开始查找时,将当前状态(初始状态)置为1,state1的存储地址是0x0001。然后,读入字符T对应的映射值,根据图5示出的映射表可知映射值为2。然后,根据映射值2查询当前状态(state1)对应的状态迁移表,如图7所示,state1下映射值为2时对应的下一状态地址是0x0005,而0x0005为state3的存储地址,于是从state1迁移到state3。然后,判断state3所对应的数据类型,由于state3的地址0x0005等于Str_min,所以可知是Str类型的数据。接着,依次读取待查找报文中的b,s,t,并跟状态迁移表中地址0x0005对应的string字段存储的0x65:e,0x73:s,0x74:t进行比较,发现待查找报文中的b与string字段存储的0x65:e不相等,则不再比较后续字符,获取字符b的映射值,根据图5可知,字符b的映射值为0,查询图7所示的状态迁移表可知,state3时映射值0对应的下一状态的地址为0x0,该地址为失败态地址,于是整个正则表达式匹配失败,输出匹配失败的结果。
假设输入的待查找匹配的报文为Test1234。对于Char型数据T和Str型数据est的匹配过程与前面相同,以下只描述对Rep型数据1234的匹配过程。判断state2的数据类型,由于state2的地址0x0002处于Rep_min(0x0002)和Str_min(0x0005)之间,则确定状态2属于Rep类型的数据,于是依次读入字符1,2,3,4的映射值,并逐个判断每一个映射值是否在掩码Mask值的范围之内。根据图5可知,字符1-4的映射值都为1,而掩码Mask值为0x02,即bit1为有效位,所以1-4的映射值在掩码Mask值的范围之内。但是,上述匹配过程只循环了4次,不满足循环5次的条件且已经到达待查找报文的结尾,于是整个正则表达式匹配失败,输出匹配失败结果。
本发明实施例1提供的正则表达式的匹配方法,通过用字符映射值来代替同一类字符,有利于可以极大地减小状态迁移表所占用的储存空间。通过将待匹配报文分成单个字符型、多个字符型重复字符型,并根据状态的存储地址来判断数据类型,以便采用不同的处理类型或方式,以及根据状态的储存地址来判断当前的状态是接受态还是失败态,可以加快匹配速度、提高运行效率,不需要回溯。
实施例2:
本发明实施例2提供了一种正则表达式匹配装置。图8为本发明实施例2的正则表达式匹配装置的功能框图。如图8所示,该装置200包括:
报文及DFA表载入单元210,用于输入待匹配报文及确定性有限自动机DFA状态表,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态;
查找单元230,包括数据类型确定模块231、匹配模块232及输出模块234;
数据类型确定模块231,用于判断当前状态对应的数据类型,所述数据类型包括单个字符Char型和多个字符Str型,所述Str型对应的数据为连续的多个字符;
匹配模块232,用于如果当前状态对应的数据类型是Str型,则将待匹配报文中当前状态的多个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态;
输出模块234,用于当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
可选地,DFA状态表还包括字符映射表,所述字符映射表中包括字符值与映射值之间的映射关系;图8所示装置还可以进一步包括:报文预处理单元220,用于根据上述字符映射表对上述待匹配报文进行映射处理,生成一个或多个映射值。
匹配模块232,还可以用于将待匹配报文中当前状态的单个字符值的映射值与匹配条件进行匹配处理。
可选地,数据类型还可以重复字符Rep型,Rep型对应的数据为连续出现多次的属于一定范围内的多个字符。数据类型确定模块231,还可以用于判断当前状态对应的数据类型,所述数据类型包括单个字符Char型、多个字符Str型和重复字符Rep型。匹配模块232,还可以用于如果当前状态对应的数据类型是Rep型,则将待匹配报文中当前状态的映射值与匹配条件进行匹配处理,当匹配时,迁移至所述符合匹配条件的下一状态。
可选地,DFA状态表还包括状态属性表,状态属性表包括第一地址阈值Str_min和第二地址阈值Rep_min;数据类型确定模块231,具体可以用于如果当前状态的地址大于或等于所述Str_min,则确定当前状态对应的数据类型是Str型;如果当前状态的地址大于或等于所述Rep_min,并且小于所述Str_min,则确定当前状态对应的数据类型是Rep型;或者,如果当前状态的地址小于所述Rep_min,则确定当前状态对应的数据类型是Char型。
具体地,匹配条件包括预先配置的Char型数据的映射值,符合匹配条件的下一状态是对应于所述预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址;匹配模块232,具体可以用于如果当前状态对应的数据类型是Char型,则将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如一致,则根据当前状态的状态号和当前状态的映射值,查询状态迁移表以获得下一状态的地址,并迁移到下一状态。
可选地,上述匹配条件及符合匹配条件的下一状态包括:Str型数据匹配条件以及符合Str型数据匹配条件的下一状态;其中,Str型数据匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成后迁移至下一状态的地址。匹配模块232,具体可以用于如果当前状态对应的数据类型是Str型,将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态。
可选地,上述匹配条件及符合匹配条件的下一状态包括:Rep型数据匹配条件以及符合Rep型数据匹配条件的下一状态;其中,述Rep型数据匹配条件包括:存储于Count字段中的重复次数n2,其中,n2为正整数;以及存储于Mask字段中的掩码;符合Rep型数据匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址。匹配模块232,具体可以用于如果当前状态对应的数据类型是Rep型,将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在所述掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态。
可选地,输出模块234,还用于当下一状态为失败态时,结束匹配过程并输出匹配失败结果;或者,当下一状态既不是接受态也不是失败态,并且当前匹配的字符是待匹配报文的最后一个字符时,结束匹配过程并输出匹配失败结果。
可选地,查找单元230还可以进一步包括:状态判断模块233,用于当下一状态的地址大于或等于预设的接受态地址阈值时,确定下一状态为接受态;当下一状态的地址大于预设的失败态地址阈值且小于预设的接受态地址阈值时,确定下一状态为中间态;当下一状态的地址等于预设的失败态地址阈值时,确定下一状态为失败态。
具体地,上述字符包括:ASCII码字符或者UNICODE码字符等可以用二进制表示的值。
可选地,匹配模块232,还可以用于将待匹配报文的第一个字符处理为Char型数据。
可选地,报文及DFA表载入单元210还包含缓存,该缓存包括先进先出存储器FIFO和随机存取存储器RAM,该FIFO用于存储状态属性表,该RAM用于存储字符映射表和状态迁移表。
可选地,图8所示装置还可以进一步包括:缓存管理单元240,用于判断和刷新缓存的空满状态并反馈给报文及DFA表载入单元210。查找单元230查找结束后,通知缓存管理单元240释放当前的缓存空间。缓存管理单元240根据当前缓存使用情况,把释放指示转换成缓存空指示并传送给报文及DFA表载入单元210,报文及DFA表载入单元210便可以载入新的报文及DFA表。
需要说明的是,由于报文及DFA表载入单元210无法预知查找单元230需要获取字符值还是映射值,所以本发明实施例2的正则表达式匹配装置设置了报文预处理单元210,来将字符值和映射值同时准备好,以加快查找单元230的处理速度。报文预处理单220元用于连续检测输入FIFO状态,在FIFO非空时读出参数值,然后逐字节读出报文并进行映射处理,向查找单元130输出字符值和映射值。查找单元230在字符值和映射值准备好后,取出报文数据或者映射值,结合当前所处的状态号,查找上述状态迁移表,…如此循环,直到得到匹配结果。缓存管理单元240,用于根据查找结果及缓存载入情况判断该缓存的空满状态,并把判断结果输出给报文及DFA表载入单元210。
以下描述在一较佳实施例中,本发明实施例的正则表达式装置的工作过程。图9为本发明实施例2的正则表达式匹配装置200的工作流程图。结合参阅图8和图9,包括如下步骤:
步骤300:在内部缓存RAM非满时,载入需要查找的报文和相应的DFA表,本步骤由图8中的报文及DFA表载入单元210完成。DFA表由需要匹配的正则表达式规则编译和压缩而成。
步骤302:报文预处理单元220根据报文和DFA表中的存储的字符映射表,获取报文数据进行映射。具体做法是每次取一字节的的报文数据,然后查找字符映射表,得到的结果作为该字节数据对应的映射值,并和这字节数据一起输出给查找单元230。
步骤304:查找单元230根据当前状态所在的地址和状态属性表中的Rep_min和Str_min值,确定当前匹配的字节属于哪种数据类型。根据不同的类型取用报文数据或者映射值,结合当前状态号,查找报文及DFA表载入单元210中的状态迁移表,得到下一状态所在地址。
步骤306:查找单元230根据下一状态的储存地址判断是否为接受态。例如状态地址为9bit时,我们把所在的地址大于或等于接受态阈值的状态判定为接收态。接受态的地址范围可以根据实际需要来设定。状态机一旦跳到一个接受态,则认为当前报文与规则匹配成功。如果下一状态不是接受态,则转到步骤310。
步骤308:查找单元230输出匹配成功结果,并通知缓存管理单元240释放缓存。
步骤310:下一状态不是接受态,查找单元230还需要判断下一状态是否为失败态(即下一状态地址为0)。如是,则认为当前报文与规则匹配失败,进入步骤312;如否,则转到步骤314。未查找完报文就知道不匹配的主要是一些指定报文头的规则,例如规则/^test/,则只要报文的前四个字节不是test就认为匹配失败了。
步骤312:查找单元230输出不匹配结果,也即输出匹配失败结果,并通知缓存管理单元140释放缓存。
步骤314:下一状态既不是接受态也不是失败态的,查找单元230还需要判断当前字节是否为报文最后一个字节。如是,则认为当前报文与正则表达式规则不匹配,进入步骤312;如否,则进入步骤302继续取报文下一字节进行比较。
以下描述本发明实施例2图8中的查找单元230的工作流程。
图10为本发明实施例2图8所示的查找单元的工作流程图。结合参阅图8和图10,查找单元的工作流程包括如下步骤:
步骤400:判断报文预处理单元220的字符和映射值是否准备好。如是,则转到步骤402,否则继续等待。
步骤402:把当前状态设置为1(初始状态值),并从报文预处理单元220读入一字节的报文数据和映射值。
步骤404:每次查找开始的第一字节数据都按照Char型数据处理,根据把当前状态的地址以及该字节数据对应的映射值,查找状态迁移表得到下一状态所在的地址。
步骤406:根据下一状态所在的地址判断是否属于接受态。如是,则转到步骤424,否则转到步骤408。例如状态地址为9bit时,我们把所在的地址大于或等于0x1F8的状态判定为接收态。状态机一旦跳到一个接受态,则认为当前报文与规则匹配成功。
步骤408:根据下一状态所在的地址判断是否属于失败态。如是,则转到步骤426,否则转到步骤410。当下一状态的状态地址为0时,判定下一状态为失败态。状态机一旦跳到一个失败态,则认为当前报文与规则匹配失败。
步骤410:下一状态既不是接受态也不是失败态,还需要判断当前字节是否报文最后一个字节。如是,则认为当前报文与规则不匹配,转到步骤426;否则转到步骤412。
步骤412:接着结合Rep_min和Str_min判断下一状态的类型。如果下一状态所在的地址大于等于Rep_min而小于Str_min则判断为Rep型,并转到步骤416。否则转到步骤414。
步骤414:如果大于等于Str_min则判断为Str型,转到步骤318。否则判断为char型,转到步骤420。
步骤416:当前数据属于Rep型数据。用前面所得的下一状态地址,访问报文及DFA表载入单元110中的状态迁移表,读出Rep型属性数据,包括Exit_st,Count和Mask。然后逐个字节读出报文的映射值,判断是否在Mask范围内,如在Mask范围内则计数值加1。计数值等于Count的值时表示重复的字符全部匹配,取Exit_st作为下一状态地址,判断类型后继续查找。当前类型的数据处理完之后,转到步骤422。
此外,如果映射值不在Mask范围内时,则读取当前不匹配字符对应的映射值,根据状态迁移表得到下一状态的地址,与接收态地址阈值和失败态地址阈值进行比较,在判断阈值范围后进行下一步相应处理。
步骤418:当前数据属于Str型数据。用前面所得的下一状态地址,访问报文及DFA表载入单元210中的状态迁移表,读出Str型属性数据,包括Exit_st,Str_len和String。然后逐个字节读出报文字符值,与String中存储的数据进行比较,比较相等则计数值加1。计数值等于Str_len时表示连续的字符全部匹配,取Exit_st作为下一状态地址,判断类型后继续查找。当前类型的数据匹配处理完之后,转到步骤422。
另外,如果字符比较时不相等,则读取当前不匹配的字符对应的映射值,根据状态迁移表得到下一状态的地址,与接收态地址阈值和失败态地址阈值进行比较,在判断阈值范围后进行下一步相应处理。
步骤420:当前数据属于Char型数据。把查找状态迁移表得到的下一状态地址替换成当前状态地址,重新读入一字节的字符映射值,转到步骤422。
步骤422:从报文预处理单元220读入下一字节的报文数值和映射值,继续查找。
步骤424:输出匹配成功的结果,并通知缓存管理单元240释放相应的缓存。
步骤426:输出匹配失败的结果,并通知缓存管理单元240释放相应的缓存。
本发明实施例2的有益效果在于:
1、本发明实施例提供的引擎在查找时不需要回溯,匹配速度快。
2、对原始DFA数据进行了压缩和优化,使着结构简洁,占用更小的储存空间和更小的逻辑资源或硬件资源,运行速度进一步加快,运行频率更高。
3、硬件结构精简,容易实现多个正则表达式引擎并行工作来提高处理能力。尤其适合10Gbps以上的需求场景。
4、与通用处理器或者网络处理器配合,可实现以下功能:报文过滤、攻击防护、病毒检测、垃圾邮件过滤、协议检测、基于协议的流量监控等。
尽管上面详细例阐述了本发明的实施示例,但是本领域的计数人员将会理解,只要把本发明做一些细节上的调整,就可以用在其他形式的环境中,而并没有背离本发明的精神和范围。例如,本发明实施例也可以在通用的计算机上用纯软件的方式实现;或者把需要处理的表项内容储存在外部储存器中使用;或者一部分功能使用软件实现一部分使用硬件实现,等等。

Claims (7)

1.一种正则表达式匹配的方法,其特征在于,所述方法由正则表达式引擎执行,所述正则表达式引擎与通用处理器或者网络处理器配合,实现以下功能:报文过滤、攻击防护、病毒检测、垃圾邮件过滤、协议检测或者基于协议的流量监控;所述方法包括:
输入待匹配报文及确定性有限自动机DFA状态表,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态;所述DFA状态表还包括字符映射表,所述字符映射表中包括字符值与映射值之间的映射关系;
判断当前状态对应的数据类型,所述数据类型包括单个字符Char型、多个字符Str型和重复字符Rep型,所述Str型对应的数据为连续的多个字符,所述Rep型对应的数据为连续出现多次的属于一定范围内的多个字符;
如果当前状态对应的数据类型是Char型,所述匹配条件包括:预先配置的Char型数据的映射值,所述符合匹配条件的下一状态包括:对应于预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址;对Char型数据的匹配处理过程包括:将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如果一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态;
如果当前状态对应的数据类型是Str型,所述匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成功后迁移至下一状态的地址;对Str型数据的匹配处理过程包括:将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态;
如果当前状态对应的数据类型是Rep型,所述匹配条件包括:存储于Count字段中的相同类型字符的重复次数n2,其中,n2为正整数,以及存储于Mask字段中的Rep型数据的字符集合映射值的掩码,所述掩码用来表示当前字符的映射值是否在预定范围之内,若是,则进行计数,直到达到预定计数值;所述符合匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址;对Rep型数据的匹配处理过程包括:将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态;
当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:将待匹配报文的第一个字符的数据类型判断为Char型。
3.根据权利要求1所述的方法,其特征在于,利用随机存取存储器RAM存储所述字符映射表和所述状态迁移表。
4.一种正则表达式匹配的装置,其特征在于,所述装置为正则表达式引擎,所述正则表达式引擎与通用处理器或者网络处理器配合,实现以下功能:报文过滤、攻击防护、病毒检测、垃圾邮件过滤、协议检测或者基于协议的流量监控;所述装置包括:
报文及DFA表载入单元,用于输入待匹配报文及确定性有限自动机DFA状态表,所述DFA状态表包括状态迁移表,所述状态迁移表中包括正则表达式匹配过程中的所有状态地址和各个状态之间的迁移关系,所述迁移关系包括匹配条件及符合匹配条件的下一状态;所述DFA状态表还包括字符映射表,所述字符映射表中包括字符值与映射值之间的映射关系;
报文预处理单元,用于根据所述字符映射表对上述待匹配报文进行映射处理,生成映射值;
查找单元,包括数据类型确定模块、匹配模块及输出模块;
所述数据类型确定模块,用于判断当前状态对应的数据类型,所述数据类型包括单个字符Char型多个字符Str型和重复字符Rep型,所述Str型对应的数据为连续的多个字符,所述Rep型对应的数据为连续出现多次的属于一定范围内的多个字符;
所述匹配模块,用于如果当前状态对应的数据类型是Char型,所述匹配条件包括:预先配置的Char型数据的映射值,所述符合匹配条件的下一状态包括:对应于预先配置的Char型数据的映射值和当前状态的状态号的下一状态的地址;对Char型数据的匹配处理过程包括:将待匹配报文中当前状态的单个字符值对应的映射值与预先配置的Char型数据的映射值进行比较,如果一致,则根据当前状态的状态号和当前状态的映射值,查询所述状态迁移表以获得下一状态的地址,并迁移到下一状态;
所述匹配模块,还用于如果当前状态对应的数据类型是Str型,所述匹配条件包括:存储于StrLen字段中的预设字符个数n1,其中,n1为正整数;以及存储于String字段中的预设的n1个字符各自的字符值;所述符合匹配条件的下一状态包括:存储于StrExitSt字段中的Str型数据匹配成功后迁移至下一状态的地址;对Str型数据的匹配处理过程包括:将待匹配报文中当前状态的n1个字符值,与String字段存储的n1个字符值依次进行比较,当全部相等时,根据StrExitSt字段指示的下一状态的地址迁移到下一状态;
所述匹配模块,还用于如果当前状态对应的数据类型是Rep型,所述匹配条件包括:存储于Count字段中的相同类型字符的重复次数n2,其中,n2为正整数,以及存储于Mask字段中的Rep型数据的字符集合映射值的掩码,所述掩码用来表示当前字符的映射值是否在预定范围之内,若是,则进行计数,直到达到预定计数值;所述符合匹配条件的下一状态:存储于RepExitSt字段中的指示Rep型数据匹配成功后迁移至下一状态的地址;对Rep型数据的匹配处理过程包括:将待匹配报文中n2个字符分别对应的映射值与Mask字段中的掩码进行比较,当n2个字符各自对应的映射值全部在掩码范围内时,根据所述RepExitSt字段指示的下一状态的地址迁移到下一状态;
所述输出模块,用于当所述下一状态为接受态时,结束匹配过程并输出匹配成功结果。
5.根据权利要求4所述的装置,其特征在于,所述匹配模块,还用于将待匹配报文的第一个字符的数据类型判断为Char型。
6.根据权利要求4所述的装置,其特征在于,所述报文及DFA表载入单元还包含缓存,所述缓存包括随机存取存储器RAM,所述RAM用于存储所述字符映射表和所述状态迁移表。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:缓存管理单元,用于判断和刷新所述缓存的空满状态并反馈给所述报文及DFA表载入单元。
CN 201010580832 2010-12-09 2010-12-09 一种正则表达式匹配的方法及装置 Expired - Fee Related CN102142009B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010580832 CN102142009B (zh) 2010-12-09 2010-12-09 一种正则表达式匹配的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010580832 CN102142009B (zh) 2010-12-09 2010-12-09 一种正则表达式匹配的方法及装置

Publications (2)

Publication Number Publication Date
CN102142009A CN102142009A (zh) 2011-08-03
CN102142009B true CN102142009B (zh) 2013-08-14

Family

ID=44409532

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010580832 Expired - Fee Related CN102142009B (zh) 2010-12-09 2010-12-09 一种正则表达式匹配的方法及装置

Country Status (1)

Country Link
CN (1) CN102142009B (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102520807A (zh) * 2011-11-29 2012-06-27 深圳市万兴软件有限公司 一种输入字符控制方法和系统
CN102497319B (zh) * 2011-12-13 2014-10-08 曙光信息产业(北京)有限公司 一种利用自动机实现单包匹配的系统和方法
CN102521357A (zh) * 2011-12-13 2012-06-27 曙光信息产业(北京)有限公司 一种利用自动机实现文本精确匹配的系统和方法
CN102521356B (zh) * 2011-12-13 2015-04-01 曙光信息产业(北京)有限公司 基于确定有限状态自动机的正则表达式匹配设备和方法
CN102420879A (zh) * 2011-12-13 2012-04-18 北京天融信科技有限公司 一种前缀重新编址方法、系统、DHCPv6服务器、中继设备
CN102646123A (zh) * 2012-02-23 2012-08-22 北京星网锐捷网络技术有限公司 多模式匹配方法、装置和设备
CN102624736B (zh) * 2012-03-20 2014-11-12 瑞斯康达科技发展股份有限公司 一种tl1命令校验方法及装置
CN103544142B (zh) * 2012-07-17 2016-12-21 安凯(广州)微电子技术有限公司 一种状态机
CN102831232B (zh) * 2012-08-30 2015-12-16 山石网科通信技术有限公司 字符串的匹配方法及装置
CN103685222A (zh) * 2013-09-05 2014-03-26 北京科能腾达信息技术股份有限公司 基于确定性有穷状态自动机的数据匹配检测方法
CN103455754B (zh) * 2013-09-05 2016-05-04 上海交通大学 一种基于正则表达式的恶意搜索关键词识别方法
CN103560878B (zh) * 2013-09-30 2017-02-01 东软集团股份有限公司 基于dpi签名特征的dfa运行方法及系统
CN103729452B (zh) * 2013-12-31 2017-05-10 杭州华为数字技术有限公司 一种规则匹配方法及装置
CN103973684B (zh) * 2014-05-07 2017-05-24 北京神州绿盟信息安全科技股份有限公司 规则编译匹配方法及装置
US10142353B2 (en) * 2015-06-05 2018-11-27 Cisco Technology, Inc. System for monitoring and managing datacenters
US10536357B2 (en) 2015-06-05 2020-01-14 Cisco Technology, Inc. Late data detection in data center
CN107305540B (zh) * 2016-04-20 2021-03-02 顺丰科技有限公司 地址切分识别方法
CN106326363B (zh) * 2016-08-11 2019-09-17 海信集团有限公司 一种基于正则表达式的匹配方法及装置
CN107733803B (zh) * 2016-08-11 2020-04-17 珠海优特电力科技股份有限公司 组播报文过滤方法、装置和组播报文接收设备
CN108111466A (zh) * 2016-11-24 2018-06-01 北京金山云网络技术有限公司 一种攻击检测方法及装置
CN110083746B (zh) * 2018-04-20 2021-01-22 武汉绿色网络信息服务有限责任公司 一种基于字符串的快速匹配识别方法和装置
CN111198953B (zh) * 2018-11-16 2023-07-07 北京智慧正安科技有限公司 基于案件文本信息推荐类案的方法、系统及可读存储介质
CN109646959B (zh) * 2018-12-05 2022-03-08 深圳市迷你玩科技有限公司 基于状态机管理非玩家角色npc的方法及相关设备
CN110321463B (zh) * 2019-05-31 2022-01-21 中国科学院计算技术研究所 一种字符串匹配方法、系统、存储介质及装置
CN110362593B (zh) * 2019-07-11 2021-12-31 上海达梦数据库有限公司 一种数据查询方法、装置、设备及存储介质
CN113010749A (zh) * 2019-12-19 2021-06-22 上海复旦微电子集团股份有限公司 正则表达式匹配系统
CN111147326A (zh) * 2019-12-19 2020-05-12 芯创智(北京)微电子有限公司 一种网络包处理器及对数据包的处理方法
CN113961698A (zh) * 2020-07-15 2022-01-21 上海乐言信息科技有限公司 基于神经网络模型的意图分类方法、系统、终端及介质
CN114039928A (zh) * 2021-11-02 2022-02-11 恒安嘉新(北京)科技股份公司 网络流量的识别方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1429257A2 (en) * 2002-12-13 2004-06-16 Xerox Corporation Method and apparatus for recognizing multiword expressions
CN101174261A (zh) * 2006-11-03 2008-05-07 北京航空航天大学 用于多正则表达式联合搜索的扩展有限状态机及搜索方法
CN101853301A (zh) * 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
CN101901268A (zh) * 2010-08-02 2010-12-01 华为技术有限公司 一种规则匹配方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8447588B2 (en) * 2008-12-18 2013-05-21 Palo Alto Research Center Incorporated Region-matching transducers for natural language processing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1429257A2 (en) * 2002-12-13 2004-06-16 Xerox Corporation Method and apparatus for recognizing multiword expressions
CN101174261A (zh) * 2006-11-03 2008-05-07 北京航空航天大学 用于多正则表达式联合搜索的扩展有限状态机及搜索方法
CN101853301A (zh) * 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
CN101901268A (zh) * 2010-08-02 2010-12-01 华为技术有限公司 一种规则匹配方法及装置

Also Published As

Publication number Publication date
CN102142009A (zh) 2011-08-03

Similar Documents

Publication Publication Date Title
CN102142009B (zh) 一种正则表达式匹配的方法及装置
CN105224692B (zh) 支持多核处理器的sdn多级流表并行查找的系统及方法
Lin et al. Using string matching for deep packet inspection
Ficara et al. An improved DFA for fast regular expression matching
US6633953B2 (en) Range content-addressable memory
AU2004204933B2 (en) Methods and apparatuses for evaluation of regular expressions of arbitrary size
CN102521334B (zh) 一种基于分类特性和平衡二叉树的数据存储、查询方法
US6957215B2 (en) Multi-dimensional associative search engine
US7565343B2 (en) Search apparatus and search management method for fixed-length data
CN101345707B (zh) 一种实现IPv6报文分类的方法及设备
WO2009015603A1 (fr) Système de compilation d'expressions régulières, système d'appariement, procédé de compilation et procédé d'appariement
Van Lunteren et al. Hardware-accelerated regular expression matching at multiple tens of Gb/s
WO2006074014A2 (en) Database query processor
Meiners et al. Hardware based packet classification for high speed internet routers
CN101458694A (zh) 一种基于树形词库的中文分词方法
CN108875064A (zh) 基于FPGA的OpenFlow多维数据匹配查找方法
CN103685222A (zh) 基于确定性有穷状态自动机的数据匹配检测方法
WO2008141519A1 (fr) Méthode et structure de puce de mise en concordance de chaînes de caractères
Han et al. A novel routing algorithm for IoT cloud based on hash offset tree
CN106484815A (zh) 一种基于海量数据类sql检索场景的自动识别优化方法
Erdem Tree-based string pattern matching on FPGAs
CN102143151A (zh) 一种基于深度包检测的协议跨包检测方法和装置
CN111061972B (zh) 一种用于url路径匹配的ac查找优化方法和装置
CN102986177B (zh) 一种tcam表项的设置方法及装置
CN104301227B (zh) 基于tcam的高速低功耗ip路由表查找方法

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
TR01 Transfer of patent right

Effective date of registration: 20170726

Address after: 510640 Guangdong City, Tianhe District Province, No. five, road, public education building, unit 371-1, unit 2401

Patentee after: Guangdong Gaohang Intellectual Property Operation Co., Ltd.

Address before: 518129 headquarters building of Bantian HUAWEI base, Longgang District, Guangdong, Shenzhen

Patentee before: Huawei Technologies Co., Ltd.

CB03 Change of inventor or designer information

Inventor after: Yang Zhijie

Inventor before: Xu Minfeng

Inventor before: Fu Rao

Inventor before: Shi Lifeng

Inventor before: Duan Guolian

Inventor before: Cheng Guifeng

CB03 Change of inventor or designer information
TR01 Transfer of patent right

Effective date of registration: 20170913

Address after: The 3 District Lin Shui Tun Village North shop Township in Qingyuan County, Hebei province 071000 Baoding City No. 012

Patentee after: Yang Zhijie

Address before: 510640 Guangdong City, Tianhe District Province, No. five, road, public education building, unit 371-1, unit 2401

Patentee before: Guangdong Gaohang Intellectual Property Operation Co., Ltd.

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130814

Termination date: 20171209

CF01 Termination of patent right due to non-payment of annual fee