多模式的串匹配方法和装置的制造方法_2

文档序号:9667361阅读:来源:国知局
根据所述移动表寻找可能的匹配位置,对 根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自动机进行匹配验证,根 据所述移动表继续寻找下一个可能的匹配位置,直至所述滑动窗口滑动至所述文本串的末 尾,解决了AC算法中窗口滑动慢,以及Wu-Manber算法中比较结果不留存的问题。
[0045] 第二实施例
[0046] 本实施例以本发明上述实施例为基础,进一步的提供了所述多模式的串匹配方法 中匹配验证的一种技术方案。在该技术方案中,对根据所述移动表找到的可能的匹配位置, 根据所述Aho-Corasick自动机进行匹配验证包括:读取文本串的下一个字符;若当前状态 存在一个权值为所述下一个字符的下一个状态,则跳转至下一个状态;若所述下一个状态 为终结状态,则报告字符串匹配成功。
[0047] 参见图3,对根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自 动机进行匹配验证包括:
[0048] S31,读取文本串的下一个字符。
[0049] 本实施例利用AC算法中的匹配机制对可能的匹配位置是否真正是匹配位置进行 验证。而AC算法中对文本串中的字符是逐个进行运算的。因此,在根据Aho-Corasick自 动机进行匹配验证的开始,首先需要读取所述文本串的下一个字符。
[0050] S32,若当前状态存在一个权值为所述下一个字符的下一个状态,则跳转至下一个 状态。
[0051] 在所述Aho-Corasick自动机中,每个转移指针都具有其对应的权值。而且,这个 权值的取值是该状态转移在所述模式串中对应的字符。
[0052] 如果在当前状态下,存在一个转移指针,它的权值就是刚刚读取的所述文本串中 的下一个字符,则将在所述Aho-Corasick自动机的当前状态转换为所述下一个状态。
[0053] S33,若所述下一个状态为终结状态,则报告字符串匹配成功。
[0054] 在所述Aho-Corasick自动机中,如果一个状态的转移指针的个数是0,则这个状 态是终结状态。如果在状态转移的过程中,跳转至的状态是一个终结状态,则说明文本串与 模式串之间的匹配成功,可以报告上述成功。
[0055] 本实施例所提供的多模式的串匹配方法中的匹配验证的技术方案可以由如下的 伪码表示:
[0056]
[0058] 上述伪码中,q表示在串匹配过程中所述Aho-Corasick自动机的当前节点, goto()是AC算法中的转移函数,fail()是AC算法中的失效函数,output()是AC算法中 的输出函数。
[0059] 本实施例通过读取文本串的下一个字符,在当前状态存在一个权值为所述下一个 字符的下一个状态时,跳转至下一个状态,以及当所述下一个状态是终结状态时,报告字符 串匹配成功,实现了对可能的匹配位置的匹配验证。
[0060] 第四实施例
[0061] 本实施例提供了多模式的串匹配装置的一种技术方案。参见图4,所述多模式的 串匹配装置包括:自动机创建模块41、移动表创建模块42、位置寻找模块43、匹配验证模块 44以及重复寻找模块45。
[0062] 所述自动机创建模块41用于根据模式串创建Aho-Corasick自动机。
[0063] 所述移动表创建模块42用于根据模式串创建移动表,其中所述移动表记录了所 述模式串中字符块的位移量。
[0064]所述位置寻找模块43用于若文本串的滑动窗口未滑动至所述文本串的末尾,根 据所述移动表寻找可能的匹配位置,所述滑动窗口的长度至少是2。
[0065]所述匹配验证模块44用于对根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自动机进行匹配验证。
[0066]所述重复寻找模块45用于根据所述移动表继续寻找下一个可能的匹配位置,直 至所述滑动窗口滑动至所述文本串的末尾。
[0067] 可选的,所述位置寻找模块43具体用于:查找所述移动表中记录的,位移量为0的 位置,并将所述位移量为〇的位置作为可能的匹配位置。
[0068] 可选的,所述匹配验证模块44包括:字符读取单元、状态跳转单元以及报告单元。
[0069]所述字符读取单元用于读取文本串的下一个字符。
[0070]所述状态跳转单元用于若当前状态存在一个权值为所述下一个字符的下一个状 态,则跳转至下一个状态。
[0071]所述报告单元用于若所述下一个状态为终结状态,则报告字符串匹配成功。
[0072]本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计 算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络 上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储 装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多 个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和 软件的结合。
[0073]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与 其他实施例的不同之处,各个实施例之间的相同或相似的部分互相参见即可。
[0074] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员 而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同 替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1. 一种多模式的串匹配方法,其特征在于,包括: 根据模式串创建Aho-Corasick自动机; 根据模式串创建移动表,其中,所述移动表记录了所述模式串中字符块的位移量; 若文本串的滑动窗口未滑动至所述文本串的末尾,根据所述移动表寻找可能的匹配位 置,所述滑动窗口的长度至少是2 ; 对根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自动机进行匹配 验证; 根据所述移动表继续寻找下一个可能的匹配位置,直至所述滑动窗口滑动至所述文本 串的末尾。2. 根据权利要求1所述的方法,其特征在于,根据所述移动表寻找可能的匹配位置包 括: 查找所述移动表中记录的,位移量为〇的位置,并将所述位移量为〇的位置作为可能的 匹配位置。3. 根据权利要求1所述的方法,其特征在于,对根据所述移动表找到的可能的匹配位 置,根据所述Aho-Corasick自动机进行匹配验证包括: 读取文本串的下一个字符; 若当前状态存在一个权值为所述下一个字符的下一个状态,则跳转至下一个状态; 若所述下一个状态为终结状态,则报告字符串匹配成功。4. 一种多模式的串匹配装置,其特征在于,包括: 自动机创建模块,用于根据模式串创建Aho-Corasick自动机; 移动表创建模块,用于根据模式串创建移动表,其中所述移动表记录了所述模式串中 字符块的位移量; 位置寻找模块,用于若文本串的滑动窗口未滑动至所述文本串的末尾,根据所述移动 表寻找可能的匹配位置,所述滑动窗口的长度至少是2 ; 匹配验证模块,用于对根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自动机进行匹配验证; 重复寻找模块,用于根据所述移动表继续寻找下一个可能的匹配位置,直至所述滑动 窗口滑动至所述文本串的末尾。5. 根据权利要求4所述的装置,其特征在于,所述位置寻找模块具体用于: 查找所述移动表中记录的,位移量为〇的位置,并将所述位移量为〇的位置作为可能的 匹配位置。6. 根据权利要求4所述的装置,其特征在于,所述匹配验证模块包括: 字符读取单元,用于读取文本串的下一个字符; 状态跳转单元,用于若当前状态存在一个权值为所述下一个字符的下一个状态,则跳 转至下一个状态; 报告单元,用于若所述下一个状态为终结状态,则报告字符串匹配成功。
【专利摘要】本发明实施例公开了一种多模式的串匹配方法和装置。所述方法包括:根据模式串创建Aho-Corasick自动机;根据模式串创建移动表,其中所述移动表记录了所述模式串中字符块的位移量;若文本串的滑动窗口未滑动至所述文本串的末尾,根据所述移动表寻找可能的匹配位置;对根据所述移动表找到的可能的匹配位置,根据所述Aho-Corasick自动机进行匹配验证;根据所述移动表继续寻找下一个可能的匹配位置,直至所述滑动窗口滑动至所述文本串的末尾。本发明实施例提供的多模式的串匹配方法和装置解决了AC算法中窗口滑动慢的问题,以及Wu-Manber算法中比较结果不留存的问题。
【IPC分类】G06F17/30
【公开号】CN105426412
【申请号】CN201510733599
【发明人】周凯
【申请人】北京锐安科技有限公司
【公开日】2016年3月23日
【申请日】2015年11月3日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1