CN102646123A - 多模式匹配方法、装置和设备 - Google Patents
多模式匹配方法、装置和设备 Download PDFInfo
- Publication number
- CN102646123A CN102646123A CN2012100447590A CN201210044759A CN102646123A CN 102646123 A CN102646123 A CN 102646123A CN 2012100447590 A CN2012100447590 A CN 2012100447590A CN 201210044759 A CN201210044759 A CN 201210044759A CN 102646123 A CN102646123 A CN 102646123A
- Authority
- CN
- China
- Prior art keywords
- character
- input character
- state
- state machine
- wild
- 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.)
- Pending
Links
Images
Landscapes
- Document Processing Apparatus (AREA)
Abstract
本发明提供一种多模式匹配方法、装置和设备,上述多模式匹配方法包括:查询映射表,获得搜寻文本中的字符的映射值;将该字符的映射值输入精简的AC状态机,以确定搜寻文本包含的搜寻模式;精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,通配字符用于表示无效输入字符;有效输入字符包括搜寻模式集合中的字符,无效输入字符包括ASCII码表中除有效输入字符之外的其他字符。本发明中精简的AC状态机将所有无效输入字符压缩为一个通配字符,从而可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率。
Description
技术领域
本发明涉及模式匹配技术,尤其涉及一种多模式匹配方法、装置和设备。
背景技术
多模式匹配问题是计算机科学的基本问题之一,多模式匹配问题可以简单描述为:一个搜寻文本和一个搜寻模式集合,判断此搜寻文本包含搜寻模式集合中的多少个搜寻模式。比如:搜寻文本A为:abcdefg123456,搜寻模式集合C为{abc、ef、tian、123、67、890}。那么,进行多模式匹配后,输出的结果就是:搜寻文本A中包含搜寻模式abc、ef和123。
多模式匹配只要扫描一遍搜寻文本,就能够找出该搜寻文本匹配的所有搜寻模式,具有很高的匹配效率,广泛用于入侵检测、病毒检测、搜索引擎和数据挖掘等领域。
AC(Aho-Corasick)算法是一种经典的多模式匹配算法,能够在任意的搜寻文本中定位任一个搜寻模式的所有位置。该算法利用有限自动机巧妙地将字符比较转化为状态转移。其原理是:首先根据搜寻模式集合定义一个有限状态模式匹配机,然后把搜寻文本作为模式匹配状态机的输入,只要匹配到搜寻模式,就会通报此搜寻模式成功。在标准的AC算法中,搜寻文本的每次输入是一个字节。
以搜寻模式集合{he、she、his、hers}为例,由此搜寻模式集合构建的AC状态机如图1所示,图1a~图1c为现有技术AC状态机的示意图。图1a中,每一个圆圈表示一个状态节点,每个状态节点都包含三个重要数据:转移(goto)函数(图1a)、失效(failure)函数(图1b)、输出(output)函数(图1c)。
其中,goto函数用于把一个由状态和输入字符组成的二元组映射成另一个状态或是失败;
failure函数用于把一个状态映射到另一个状态。当goto函数报告失效时,failure函数就会被询问;
output函数,用于表示某个搜寻模式已经被匹配。
在基本AC状态机的状态迁移中,在当前状态S和输入字符c下,下一个状态为:
操作1:如果goto(S,c)存在,那么下一个状态为goto(S,c),算法结束;否则,执行操作2;
操作2:将failure(S)赋值给S,执行操作1。
由于在基本AC状态机中,如果goto函数的结果不存在,就会导致一次或是多次的访问failure函数,为了提高AC状态机的效率,现有技术提出一种去failure的AC状态机。在去failure的AC状态机中,每一个状态节点没有failure函数,而是把goto函数和failure函数统一为:下一个状态(nextstate)函数。
去failure的AC状态机的示意图和标准AC状态机的示意图是一样的,只是每个状态节点下,不再有goto函数和failure函数,而是用nextstate函数替代。
nextstate函数,用于把一个由状态和输入字符组成的二元组映射成另一个状态。即通过nextstate函数,可获知一个确定的下一个状态。
有了nextstate函数后,AC状态机的迁移就简单多了,在当前状态S和当前输入字符c下,那么下一个状态就是:nextstate(S,c)。
为了方便获取nextstate函数,每一个状态节点需保存下一个状态表,每一个状态节点的下一个状态表记录:在当前状态下,在不同的输入字符时的下一个状态值,即在当前状态下,输入某个字符,那么将迁移到哪一个状态。由于字符是一个字节,能够表示美国信息互换标准代码(AmericanStandard Code for Information Interchange;以下简称:ASCII)码中的0~255。其中,ASCII码表记录的是用户所看到的字符与计算机内部的真正数值之间的映射,由于一个字节的取值范围是0~255,因而ASCII码表有256个单元。比如:用户看到的字母a,计算机内部的保存数值是97;用户看到的数字1,计算机内部的保存数值是31,等等。因而下一个状态表是一个具有256个成员的数组。以图1a中的状态节点1为例,状态节点1在256个不同ASCII码值输入时的下一个状态表,可以如表1所示。
表1
表1中列出的是图1a中状态节点1的下一个状态表,描述状态节点1在256个不同的ASCII码值输入时,状态节点1的下一个状态;下一个状态表是一个数组(array),其中数组的下标值用index表示:在输入的字符的ASCII码值为数组下标值时,状态节点1的下一个状态节点的值为nextstate(1,index)=array[index]。
为了更好地理解,下面举一个例子:以数组的下标值为101为例,通过表1可以看出,当数组下标值为101时,数组的值为2,即nextstate(1,101)=2,表示在状态节点1,当输入的字符的ASCII码值为101时,下一个状态节点为状态节点2,而ASCII码值101正好对应小写字母e,即在状态节点1时,输入字母e,那么下一个状态节点为状态节点2,这正如图1a中所示。
在使用去failure的AC状态机进行多模式匹配时,以搜寻模式集合{he、his、hers、she}和搜寻文本“his book not hers”为例,从去failure的AC状态机的初始状态开始,将搜寻文本的字符逐个输入,重复下述的操作:在当前状态节点下,从下一个状态表中,访问对应于当前输入字符的下一个状态;然后,迁移到此下一个状态。
当搜寻文本输入结束,就能识别出搜寻模式:his和hers。
但是现有的AC状态机,存在占用内存大的问题。由于AC状态机的每一个状态节点的下一个状态表都需要记录256个不同的ASCII码值,若一个ASCII码值用4个字节表示,那么每个状态节点的下一个状态表就需要消耗内存256×4=1024字节,即1K字节;而每个状态节点不仅包括下一个状态表,还包含其他内容,也就是说,每个状态节点至少消耗1K字节。那么,包含1万个状态节点的AC状态机将消耗超过10M字节的内存。
为了提高中央处理器(Central Processing Unit;以下简称:CPU)的效率,现有的CPU系统一般都采用CPU缓存(cache)技术。其主要思想是:CPU在访问一个地址时,先到高速cache中访问,如果高速cache中不存在,再到内存中读取。当CPU在访问一个内存地址时,会先把这个地址的附近范围的数据复制到cache中,这样,CPU在访问附近地址时,就可以直接从cache访问,而不需要去访问内存。比如:CPU在访问地址1000时,CPU把地址1000到地址2000的内容都复制到cache中,这样,当CPU要访问地址1001或是1002或是1999时,就可以直接从cache中获取,不需要去内存读取。
当CPU的访问地址的跨越不大时,此时CPU cache的优点最明显。由于技术和价格原因,网络设备上的cache的大小一般都不大,比如:几K字节或几十K字节。由于现有的AC状态机占用内存庞大,在进行AC状态迁移时,地址范围跨越太大,一般很难利用到CPU cache技术的优点。
AC状态机占用内存庞大,一方面导致CPU cache技术的优点不明显,另一方面也加大对系统内存配置的要求。
综上所述,在标准的AC状态机中,当搜寻模式集合较大时,会出现内存占用大的问题。
发明内容
本发明一方面提供一种多模式匹配方法,包括:查询映射表,获得搜寻文本中的字符的映射值;将所述字符的映射值输入精简的AC状态机,以确定所述搜寻文本包含的搜寻模式;所述精简的AC状态机根据所述映射表构建,所述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,所述通配字符用于表示无效输入字符;所述有效输入字符包括搜寻模式集合中的字符,所述无效输入字符包括美国信息互换标准代码ASCII码表中除所述有效输入字符之外的其他字符;所述映射表包括所述有效输入字符和所述有效输入字符的映射值,以及所述无效输入字符和所述无效输入字符的映射值。
本发明另一方面提供一种多模式匹配装置,包括:查询模块,用于查询映射表,获得搜寻文本中的字符的映射值;输入模块,用于将所述查询模块获得的所述字符的映射值输入精简的AC状态机,以确定所述搜寻文本包含的搜寻模式;所述精简的AC状态机根据所述映射表构建,所述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,所述通配字符用于表示无效输入字符;所述有效输入字符包括搜寻模式集合中的字符,所述无效输入字符包括美国信息互换标准代码ASCII码表中除所述有效输入字符之外的其他字符;所述映射表包括所述有效输入字符和所述有效输入字符的映射值,以及所述无效输入字符和所述无效输入字符的映射值。
本发明又一方面提供一种设备,包括如上所述的多模式匹配装置。
本发明一方面的技术效果是:查询映射表,获得搜寻文本中的字符的映射值,将该字符的映射值输入精简的AC状态机,以确定上述搜寻文本包含的搜寻模式;上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,该通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符。本发明中精简的AC状态机将所有无效输入字符压缩为一个通配字符,重点关注有效输入字符,从而可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
本发明另一方面的技术效果是:查询模块查询预先构建的映射表,获得搜寻文本中的字符的映射值之后,输入模块将上述字符的映射值输入精简的AC状态机,以确定该搜寻文本包含的搜寻模式;其中,上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,该通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符。本发明中精简的AC状态机将所有无效输入字符压缩为一个通配字符,重点关注有效输入字符,从而可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
附图说明
图1a~图1c为现有技术AC状态机的示意图;
图2为本发明多模式匹配方法一个实施例的流程图;
图3为本发明多模式匹配方法另一个实施例的流程图;
图4为本发明精简的AC状态机中任一个状态节点的下一个状态表的示意图;
图5为本发明标准的AC状态机的下一个状态表与精简的AC状态机的下一个状态表的对应关系示意图;
图6为本发明256个ASCII码值的全局映射表一个实施例的示意图;
图7为本发明多模式匹配装置一个实施例的结构示意图;
图8为本发明多模式匹配装置另一个实施例的结构示意图。
具体实施方式
图2为本发明多模式匹配方法一个实施例的流程图,如图2所示,该多模式匹配方法可以包括:
步骤201,查询映射表,获得搜寻文本中的字符的映射值。
步骤202,将上述字符的映射值输入上述精简的AC状态机,以确定上述搜寻文本包含的搜寻模式。
其中,上述精简的AC状态机根据上述映射表构建,上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,该通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符;上述映射表包括上述有效输入字符和该有效输入字符的映射值,以及上述无效输入字符和该无效输入字符的映射值。
进一步地,步骤201之前,还可以对搜寻模式集合进行扫描,将该搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除上述有效输入字符之外的其他字符划分为无效输入字符;然后,将上述有效输入字符映射为该有效输入字符在由搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将上述无效输入字符映射为由搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,以构建上述映射表,并根据该映射表构建精简的AC状态机。
具体地,根据该映射表构建精简的AC状态机可以为:根据上述搜寻模式集合,构建标准的AC状态机;将上述标准的AC状态机每个状态节点的下一个状态表中无效输入字符对应的表项压缩为通配字符对应的表项,按照上述映射表中有效输入字符和通配字符的映射值的顺序,调整上述每个状态节点的下一个状态表中有效输入字符和通配字符的顺序,使得上述每个状态节点的下一个状态表中有效输入字符和通配字符的顺序与上述映射表中有效输入字符和通配字符的映射值的顺序一致。
本实施例中,上述精简的AC状态机中每个状态节点的下一个状态表中上述通配字符对应表项的下一个状态为初始状态。
上述实施例中,查询预先构建的映射表,获得搜寻文本中的字符的映射值,将该字符的映射值输入精简的AC状态机,以确定上述搜寻文本包含的搜寻模式;上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,该通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符。本发明中精简的AC状态机将所有无效输入字符压缩为一个通配字符,重点关注有效输入字符,从而可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
在AC状态机中,状态机的输入是一个字符,由于一个字符的取值范围是ASCII码值0~255,因而AC状态机中每个状态节点的下一个状态表都需要处理256个不同ASCII码值的输入。
但是,在256个ASCII码中,有些字符是常用的,有些字符是不常用的。例如:在256个ASCII码值对应的字符中,26个字母“abcdefghijklmnopqrstuvwxyz”和10个数字“0123456789”是最常见的字符。在各类的场合中,26个字母和10个数字占了绝大部分的成分,也就是说,在256个ASCII码值的字符集合中,26个字母和10个数字虽然只占了36/256,约14%,但是起到最主要的作用。
举例来说,假设搜寻模式集合为{his,she,he,hers},3个搜寻文本分别为:abc.php、tianya.php和hello.php。可以看出,搜寻模式都是一些最基本的字符,这些字符的ASCII码值都在0~127之间。在上述举例中,对于图1a中的状态节点1来说,状态节点1的下一个状态表只要处理0~127范围内的ASCII值就足够了,因此,可以对状态节点1的下一个状态表进行精简,状态节点1精简后的下一个状态表可以如表2所示。
表2
综上所述,26个字母和10个数字虽然只占用256个ASCII码值中的少数,却是重要因子;而其他字符虽然占用了256个ASCII码值中的多数,却是不重要因子。现有的AC状态机的每个状态节点的下一个状态表对输入字符的处理是:全部处理256个不同ASCII值的输入,这种做法对256个不同ASCII码值,采取的是均等对待的方法,会明显浪费内存。
本发明提供的多模式匹配方法,采取精简的方法,每个状态节点的下一个状态表不再处理全部256个ASCII码值对应的输入字符,而是从256个ASCII码值中根据预定规则挑选部分ASCII码值,并根据挑选出的ASCII码值构造下一个状态表,从而可以大幅地缩小每个状态节点的下一个状态表的内存消耗,进而可以大幅缩小AC状态机的内存消耗,提高AC状态机的效率。
图3为本发明多模式匹配方法另一个实施例的流程图,如图3所示,该多模式匹配方法可以包括:
步骤301,对搜寻模式集合进行扫描,将该搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除上述有效输入字符之外的其他字符划分为无效输入字符。
具体地,可以扫描搜寻模式集合,将该搜寻模式集合中包含的字符划分为有效输入字符,将256个ASCII码值对应的字符中除上述有效输入字符之外的其他字符,划分为无效输入字符。
在标准的AC状态机中,输入字符的范围为ASCII码值0~255;本实施例中,有效输入字符的范围不再是全部ASCII码值0~255,而是全部ASCII码值0~255的一个子集,例如:ASCII码值97~122(表示26个字母a~z),因此本实施例构造的AC状态机为精简的AC状态机;当然,本实施例中,有效输入字符也可以为ASCII码值0~255,那么本实施例构造的AC状态机就是标准的AC状态机。
举例来说,假设搜寻模式集合为{version.php3、request.php3、bind.php3},将该搜寻模式集合中包含的字符划分为有效输入字符,那么有效输入字符的集合就是{b、e、h、i、n、o、p、r、s、t、.、3},那么256个ASCII码值对应的字符中除上述12个字符之外的其他256-12=244个ASCII码值对应的字符就是无效输入字符。
步骤302,将上述有效输入字符映射为该有效输入字符在由搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将上述无效输入字符映射为由搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,以构建映射表。
由于精简的AC状态机与标准的AC状态机不同,因而精简的AC状态机的使用方法与标准的AC状态机的使用方法也略有不同,使用精简的AC状态机增加了映射的步骤。这是由于输入字符可以覆盖ASCII 0~255,而精简的AC状态机允许输入字符的范围只是ASCII 0~255的一个子集。
本实施例中,搜寻文本中的字符不能立即输入精简的AC状态机,这是由于如果26个字母为有效输入字符,那么下一个状态表的数组只有(26+1)个,即数组下标是从0~26,其中0表示字母a,1表示字母b,以此类推;也就是说,当给精简的AC状态机输入数值0时,此时会被认为是字母a,给精简的AC状态机输入数值1时,此时会被认为是字母b,以此类推。由于精简的AC状态机所能处理的输入只是0~26,当搜寻文本的当前输入字符是字母a时,如果直接将字母a的ASCII码值97输入精简的AC状态机,则会超过精简的AC状态机的处理范围,会导致AC状态机异常。因而,搜寻文本中的字符对应的ASCII码值不能直接输入精简的AC状态机,需要查询映射表,获得搜寻文本中的字符的映射值。
本实施例中,构建映射表的基本方法是:建立一张包含256个成员的映射表,256个成员分别代表ASCII码值0~255,将ASCII码值0~255对应字符中的上述有效输入字符映射为该有效输入字符在由搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将ASCII码值0~255对应字符中的上述无效输入字符映射为由搜寻模式集合包含的字符组成的有效输入字符集合的集合大小。
举例来说,如果26个英文字母为有效输入字符,那么有效输入字符集合就是{a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z},字符a的序号是0,字符b的序号是1,字符c的序号是3,依次类似,字符z的序号为25,有效输入字符集合的大小是26。这时,映射表可以如图6所示,图6为本发明256个ASCII码值的全局映射表一个实施例的示意图。
上面只介绍了构建映射表的基本一种示例方法,当然本发明实施例并不仅限于此,还可以采用其他映射方法构建映射表,例如:可以将有效输入字符中相同字母的大写字母和小写字母映射为同一个映射值,举例来说,可以将A和a均映射为0;将无效输入字符映射为由上述搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,本发明对构建映射表的方法不作限定。
步骤303,根据映射表,构建精简的AC状态机。
具体地,精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括上述有效输入字符和一个通配字符,该通配字符用于表示256个ASCII码值对应的字符中除上述有效输入字符之外的其他所有字符,即所有的无效输入字符。
在构建上述精简的AC状态机时,可以将搜寻模式集合,按照标准的AC状态机的构造方法构造出一个标准的AC状态机,然后,将该标准的AC状态机中每个状态节点的下一个状态表进行裁剪:保留上述有效输入字符对应的表项,把无效输入字符对应的所有表项压缩为一个表项,即通配字符对应的表项,然后按照上述映射表中有效输入字符和通配字符的映射值的顺序,调整上述每个状态节点的下一个状态表中有效输入字符和通配字符的顺序,使得上述每个状态节点的下一个状态表中有效输入字符和通配字符的顺序与上述映射表中有效输入字符和通配字符的映射值的顺序一致。其中,上述通配字符对应的表项的下一个状态值为:初始状态,这是由于通配字符不可能出现在搜寻模式集合中的任一搜寻模式中,所以该通配字符对应表项的下一个状态为初始状态。
举例来说,假设搜寻模式集合为{abcdefgh、ijklmn、opqrst、uvwxyz},那么有效输入字符就是这26个英文字母,可以根据上述有效输入字符,按照标准的AC状态机的构造流程,构建精简的AC状态机,唯一不同的是:该精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围只覆盖有效输入字符和一个通配字符。在上述举例中,该精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围只覆盖26个英文字母和一个通配字符,即每个状态节点的下一个状态表的数组大小是26+1=27个单元,而在标准的AC状态机中,每个状态节点的下一个状态表的数组大小是256个单元。精简的AC状态机中每个状态节点的下一个状态表,数组下标0不再表示ASCII码值0而是表示ASCII码值97即字母a,数组下标1不再表示ASCII码值1而是表示ASCII码值98即字母b,数组下标2不再表示ASCII码值2而是表示ASCII码值99即字母c,依此类推,直至数组下标25,数组下标25不再表示ASCII码值25,而是表示ASCII码值122即字母z,数组的最后一个下标26就是通配字符。如图4所示,图4为本发明精简的AC状态机中任一个状态节点的下一个状态表的示意图。
为了更好地理解标准AC状态机下的下一个状态表与精简AC状态机下的下一个状态表的关系,可以参看图5,图5为本发明标准的AC状态机的下一个状态表与精简的AC状态机的下一个状态表的对应关系示意图。从图5中可以看出:在标准的AC状态机中每个状态节点的下一个状态表是一个具有256个成员的数组,而精简的AC状态机中每个状态节点的下一个状态表是一个具有(26+1)个成员的数组,并且精简的AC状态机每个状态节点的下一个状态表中这27个表项的顺序与映射表中这些字符的映射值的顺序是一致的。在精简的AC状态机的下一个状态表中,对应于ASCII码值为0~96以及ASCII码值123~255的无效输入字符,被映射为一个通配字符,对应数组下标26。
步骤304,读取搜寻文本中的字符,查询上述映射表,获得上述字符的映射值,将上述字符的映射值输入上述精简的AC状态机,以确定上述搜寻文本包含的搜寻模式。
上述实施例可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
下面以搜寻模式集合为{he,his,she,hers},输入搜寻文本为“his 3booknot hers”为例对本发明提供的方法进行说明。
第一步,根据搜寻模式集合划分有效输入字符。
本例中,搜寻模式集合为{he,his,she,hers},因此e、h、i、r和s这5个英文字母为有效输入字符,由搜寻模式集合包含的字符组成的有效输入字符集合为{e,h,i,r,s}。
第二步,构建映射表,并根据该映射表构建精简的AC状态机。
具体地,构建映射表和精简的AC状态机的方式可以参见本发明图3所示实施例的描述,在此不再赘述。
本例中,精简的AC状态机可以如图1a所示,该精简的AC状态机对应的映射表可以如表3所示,该精简的AC状态机中状态节点0的下一个状态表可以如表4所示。
表3
表4
输入数值 | 下一个状态 |
0 | 0 |
1 | 1 |
2 | 0 |
3 | 0 |
4 | 3 |
5 | 0 |
从表3中,可以看出:e在有效输入字符集合{e,h,i,r,s}中的序号为0,因此e被映射为数值0,以此类推,h被映射为数值1,i被映射为数值2,r被映射为数值3,s被映射为数值4。本例中,其他的无效输入字符被映射为数值5。
从状态节点0可以看出,状态节点0只保存了6个下一跳表项入口,分别是:
输入数值0(对应有效输入字符e)的下一跳状态为0;
输入数值1(对应有效输入字符h)的下一跳状态为1;
输入数值2(对应有效输入字符i)的下一跳状态为0;
输入数值3(对应有效输入字符r)的下一跳状态为0;
输入数值4(对应有效输入字符r)的下一跳状态3;
输入数值5(对应无效输入字符)的下一跳状态为0。
第三步,取输入文本的第一个字符h,由于字符h是英文字母,属于有效输入字符,字符h的ASCII码值是104,查询表3,字母h被映射为数值1,那么输入精简的AC状态机的数值是1;根据状态节点0的下一个状态表,输入1,是跳向状态节点1,即识别了字符‘h’。
然后取搜寻文本中的第二个字符i,采用与识别上述第一个字符相同的方法对第二个字符进行识别,以此类推,直至搜寻文本中的最后一个字符。
本发明提供的多模式匹配方法对搜寻模式集合进行扫描,将搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除上述有效输入字符之外的其他字符划分为无效输入字符,并把所有无效输入字符压缩为一个通配字符,从而重点关注有效输入字符,大幅缩小AC状态机的内存消耗,提高AC状态机的效率,并且没有改变AC状态机的功能。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图7为本发明多模式匹配装置一个实施例的结构示意图,如图7所示,该多模式匹配装置可以包括:查询模块71和输入模块72;
其中,查询模块71,用于查询映射表,获得搜寻文本中的字符的映射值;
输入模块72,用于将查询模块71获得的上述字符的映射值输入精简的AC状态机,以确定上述搜寻文本包含的搜寻模式;上述精简的AC状态机根据上述映射表构建,上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,上述通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符;上述映射表包括上述有效输入字符和上述有效输入字符的映射值,以及上述无效输入字符和上述无效输入字符的映射值。
本实施例中,上述精简的AC状态机中每个状态节点的下一个状态表中上述通配字符对应表项的下一个状态为初始状态。
本实施例中的多模式匹配装置可以作为设备,或设备的一部分,实现本发明图2所示实施例的流程;其中该设备可以为任何包括CPU和内存,具有计算功能的设备,例如:个人电脑(Personal Computer;以下简称:PC)机或单片机等,本发明实施例对上述设备的形态不作限定。
上述多模式匹配装置中,查询模块71查询预先构建的映射表,获得搜寻文本中的字符的映射值之后,输入模块72将上述字符的映射值输入精简的AC状态机,以确定该搜寻文本包含的搜寻模式;其中,上述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,该通配字符用于表示无效输入字符;上述有效输入字符包括搜寻模式集合中的字符,上述无效输入字符包括ASCII码表中除上述有效输入字符之外的其他字符。本发明中精简的AC状态机将所有无效输入字符压缩为一个通配字符,重点关注有效输入字符,从而可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
图8为本发明多模式匹配装置另一个实施例的结构示意图,与图7所示的多模式匹配装置相比,不同之处在于,图8所示的多模式匹配装置还可以包括:
扫描模块73,用于对搜寻模式集合进行扫描,将该搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除上述有效输入字符之外的其他字符划分为无效输入字符;
构建模块74,用于将上述有效输入字符映射为该有效输入字符在由搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将上述无效输入字符映射为由搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,以构建上述映射表,并根据该映射表构建精简的AC状态机。
具体地,构建模块74可以根据上述搜寻模式集合,构建标准的AC状态机,将上述标准的AC状态机每个状态节点的下一个状态表中无效输入字符对应的表项压缩为上述通配字符对应的表项,按照上述映射表中有效输入字符和通配字符的映射值的顺序,调整上述每个状态节点的下一个状态表中有效输入字符和通配字符的顺序,使得每个状态节点的下一个状态表中有效输入字符和通配字符的顺序与上述映射表中有效输入字符和通配字符的映射值的顺序一致。
上述多模式匹配装置可以实现减小AC状态机中每个状态节点的下一个状态表的内存消耗,进而可以缩小AC状态机的内存消耗,提高AC状态机的效率,并且不会改变AC状态机的功能。
本发明还提供一种设备,该设备可以包括本发明图7或图8所示实施例提供的多模式匹配装置,该设备可以为任何包括CPU和内存,具有计算功能的设备,例如:PC机或单片机等,本发明实施例对上述设备的形态不作限定。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (9)
1.一种多模式匹配方法,其特征在于,包括:
查询映射表,获得搜寻文本中的字符的映射值;
将所述字符的映射值输入精简的AC状态机,以确定所述搜寻文本包含的搜寻模式;所述精简的AC状态机根据所述映射表构建,所述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,所述通配字符用于表示无效输入字符;所述有效输入字符包括搜寻模式集合中的字符,所述无效输入字符包括美国信息互换标准代码ASCII码表中除所述有效输入字符之外的其他字符;所述映射表包括所述有效输入字符和所述有效输入字符的映射值,以及所述无效输入字符和所述无效输入字符的映射值。
2.根据权利要求1所述的方法,其特征在于,所述查询映射表,获得搜寻文本中的字符的映射值之前,还包括:
对所述搜寻模式集合进行扫描,将所述搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除所述有效输入字符之外的其他字符划分为无效输入字符;
将所述有效输入字符映射为所述有效输入字符在由所述搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将所述无效输入字符映射为由所述搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,以构建所述映射表;
根据所述映射表构建精简的AC状态机。
3.根据权利要求2所述的方法,其特征在于,所述根据所述映射表构建精简的AC状态机包括:
根据所述搜寻模式集合,构建标准的AC状态机;
将所述标准的AC状态机每个状态节点的下一个状态表中所述无效输入字符对应的表项压缩为所述通配字符对应的表项,按照所述映射表中所述有效输入字符和所述通配字符的映射值的顺序,调整所述每个状态节点的下一个状态表中所述有效输入字符和所述通配字符的顺序,使得所述每个状态节点的下一个状态表中所述有效输入字符和所述通配字符的顺序与所述映射表中所述有效输入字符和所述通配字符的映射值的顺序一致。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述精简的AC状态机中每个状态节点的下一个状态表中所述通配字符对应表项的下一个状态为初始状态。
5.一种多模式匹配装置,其特征在于,包括:
查询模块,用于查询映射表,获得搜寻文本中的字符的映射值;
输入模块,用于将所述查询模块获得的所述字符的映射值输入精简的AC状态机,以确定所述搜寻文本包含的搜寻模式;所述精简的AC状态机根据所述映射表构建,所述精简的AC状态机中每个状态节点的下一个状态表的输入字符的范围包括通配字符和有效输入字符,所述通配字符用于表示无效输入字符;所述有效输入字符包括搜寻模式集合中的字符,所述无效输入字符包括美国信息互换标准代码ASCII码表中除所述有效输入字符之外的其他字符;所述映射表包括所述有效输入字符和所述有效输入字符的映射值,以及所述无效输入字符和所述无效输入字符的映射值。
6.根据权利要求5所述的装置,其特征在于,还包括:
扫描模块,用于对搜寻模式集合进行扫描,将所述搜寻模式集合中包含的字符划分为有效输入字符,将ASCII码表中除所述有效输入字符之外的其他字符划分为无效输入字符;
构建模块,用于将所述有效输入字符映射为所述有效输入字符在由所述搜寻模式集合包含的字符组成的有效输入字符集合中的序号,并将所述无效输入字符映射为由所述搜寻模式集合包含的字符组成的有效输入字符集合的集合大小,以构建所述映射表,并根据所述映射表构建精简的AC状态机。
7.根据权利要求6所述的装置,其特征在于,
所述构建模块,具体用于根据所述搜寻模式集合,构建标准的AC状态机,将所述标准的AC状态机每个状态节点的下一个状态表中所述无效输入字符对应的表项压缩为所述通配字符对应的表项,按照所述映射表中所述有效输入字符和所述通配字符的映射值的顺序,调整所述每个状态节点的下一个状态表中所述有效输入字符和所述通配字符的顺序,使得所述每个状态节点的下一个状态表中所述有效输入字符和所述通配字符的顺序与所述映射表中所述有效输入字符和所述通配字符的映射值的顺序一致。
8.根据权利要求5-7任意一项所述的装置,其特征在于,所述精简的AC状态机中每个状态节点的下一个状态表中所述通配字符对应表项的下一个状态为初始状态。
9.一种设备,其特征在于,包括如权利要求5-8任意一项所述的多模式匹配装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100447590A CN102646123A (zh) | 2012-02-23 | 2012-02-23 | 多模式匹配方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100447590A CN102646123A (zh) | 2012-02-23 | 2012-02-23 | 多模式匹配方法、装置和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102646123A true CN102646123A (zh) | 2012-08-22 |
Family
ID=46658942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012100447590A Pending CN102646123A (zh) | 2012-02-23 | 2012-02-23 | 多模式匹配方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102646123A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500178A (zh) * | 2013-09-09 | 2014-01-08 | 中国科学院计算机网络信息中心 | 一种fs算法最差情况下的快速多模式匹配方法 |
CN104714951A (zh) * | 2013-12-13 | 2015-06-17 | 世纪禾光科技发展(北京)有限公司 | 一种并行多模式匹配的方法及系统 |
CN107545071A (zh) * | 2017-09-21 | 2018-01-05 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN108304467A (zh) * | 2017-12-27 | 2018-07-20 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN110225062A (zh) * | 2019-07-01 | 2019-09-10 | 北京微步在线科技有限公司 | 一种监控网络攻击的方法和装置 |
CN110300193A (zh) * | 2019-07-01 | 2019-10-01 | 北京微步在线科技有限公司 | 一种获取实体域名的方法和装置 |
CN110472112A (zh) * | 2019-08-22 | 2019-11-19 | 广州拓波软件科技有限公司 | 一种简易字符串匹配方式 |
CN113347214A (zh) * | 2021-08-05 | 2021-09-03 | 湖南戎腾网络科技有限公司 | 一种高频状态匹配方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101685502A (zh) * | 2008-09-24 | 2010-03-31 | 华为技术有限公司 | 模式匹配方法及装置 |
US20110185077A1 (en) * | 2010-01-27 | 2011-07-28 | Interdisciplinary Center Herzliya | Multi-pattern matching in compressed communication traffic |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
CN102184205A (zh) * | 2011-04-28 | 2011-09-14 | 哈尔滨工业大学 | 基于可扩展精度混沌哈希的多模式串匹配算法 |
-
2012
- 2012-02-23 CN CN2012100447590A patent/CN102646123A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101685502A (zh) * | 2008-09-24 | 2010-03-31 | 华为技术有限公司 | 模式匹配方法及装置 |
US20110185077A1 (en) * | 2010-01-27 | 2011-07-28 | Interdisciplinary Center Herzliya | Multi-pattern matching in compressed communication traffic |
CN102142009A (zh) * | 2010-12-09 | 2011-08-03 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
CN102184205A (zh) * | 2011-04-28 | 2011-09-14 | 哈尔滨工业大学 | 基于可扩展精度混沌哈希的多模式串匹配算法 |
Non-Patent Citations (1)
Title |
---|
余建明等: "Memory Efficient String Matching Algorithm for Network Intrusion Management System", 《TSINGHUA SCIENCE & TECHNOLOGY》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500178A (zh) * | 2013-09-09 | 2014-01-08 | 中国科学院计算机网络信息中心 | 一种fs算法最差情况下的快速多模式匹配方法 |
CN103500178B (zh) * | 2013-09-09 | 2017-01-11 | 中国科学院计算机网络信息中心 | 一种fs算法最差情况下的快速多模式匹配方法 |
CN104714951A (zh) * | 2013-12-13 | 2015-06-17 | 世纪禾光科技发展(北京)有限公司 | 一种并行多模式匹配的方法及系统 |
CN107545071A (zh) * | 2017-09-21 | 2018-01-05 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN107545071B (zh) * | 2017-09-21 | 2020-02-07 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN108304467A (zh) * | 2017-12-27 | 2018-07-20 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN108304467B (zh) * | 2017-12-27 | 2021-08-10 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN110225062A (zh) * | 2019-07-01 | 2019-09-10 | 北京微步在线科技有限公司 | 一种监控网络攻击的方法和装置 |
CN110300193A (zh) * | 2019-07-01 | 2019-10-01 | 北京微步在线科技有限公司 | 一种获取实体域名的方法和装置 |
CN110472112A (zh) * | 2019-08-22 | 2019-11-19 | 广州拓波软件科技有限公司 | 一种简易字符串匹配方式 |
CN113347214A (zh) * | 2021-08-05 | 2021-09-03 | 湖南戎腾网络科技有限公司 | 一种高频状态匹配方法及系统 |
CN113347214B (zh) * | 2021-08-05 | 2021-11-12 | 湖南戎腾网络科技有限公司 | 一种高频状态匹配方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102646123A (zh) | 多模式匹配方法、装置和设备 | |
CN1531692B (zh) | 用于处理大量字符的高效整理元素结构 | |
KR100935628B1 (ko) | 지리적 관련성에 따른 문서 색인화 | |
US9575947B2 (en) | System and method of automatically mapping a given annotator to an aggregate of given annotators | |
CN111258966A (zh) | 一种数据去重方法、装置、设备及存储介质 | |
CN107784110B (zh) | 一种索引建立方法及装置 | |
CN102867049B (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN101091181A (zh) | 保存和恢复互锁树数据库 | |
CN110109910A (zh) | 数据处理方法及系统、电子设备和计算机可读存储介质 | |
CN102646115A (zh) | Ac状态机的构建方法及装置 | |
CN101310277B (zh) | 获得文本的表示的方法和系统 | |
CN103870480A (zh) | 动态数据遮罩方法以及数据库系统 | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
JP7172187B2 (ja) | 情報表示方法、情報表示プログラムおよび情報表示装置 | |
CN103810204A (zh) | 一种信息查找的方法及装置 | |
Petrus | Soft and hard clustering for abstract scientific paper in Indonesian | |
JP5374881B2 (ja) | 情報検索システム、情報検索方法およびプログラム | |
CN102135969A (zh) | 构造索引库的方法和设备以及查询方法 | |
CN108292307A (zh) | 具有对压缩数据的快速操作的前缀Burrow-Wheeler变换 | |
CN114911826A (zh) | 一种关联数据检索方法和系统 | |
US20190056913A1 (en) | Information density of documents | |
CN111090743A (zh) | 一种基于词嵌入和多值形式概念分析的论文推荐方法及装置 | |
KR100349673B1 (ko) | 고차원 영상특징량의 대표값을 이용한 영상 검색 방법 | |
US7840583B2 (en) | Search device and recording medium | |
US20240220528A1 (en) | System and method for generating ontologies for enhanced search |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120822 |