压缩正则表达式的方法、匹配字符串的方法及装置制造方法

文档序号:6511051阅读:170来源:国知局
压缩正则表达式的方法、匹配字符串的方法及装置制造方法
【专利摘要】本发明公开了一种压缩正则表达式的方法、匹配字符串的方法及装置,该压缩正则表达式的方法包括:确定正则表达式的有限自动机FA包括的所有基本状态以及该所有基本状态之间的迁移关系;确定该所有基本状态中能够合并为复合状态的至少两个基本状态,该至少两个基本状态包括入态和出态,该至少两个基本状态以该入态为起点并以该出态为终点依次迁移;根据该复合状态,生成该正则表达式的FA状态迁移表。因此,根据本发明实施例的压缩正则表达式的方法、匹配字符串的方法及装置,通过将连续的至少两个基本状态合并为复合状态,能够减少FA的状态数目和迁移边数,从而降低FA占用的内存空间,提高系统的性能。
【专利说明】压缩正则表达式的方法、匹配字符串的方法及装置

【技术领域】
[0001] 本发明实施例涉及计算机领域,并且更具体地,涉及压缩正则表达式的方法、匹配 字符串的方法及装置。

【背景技术】
[0002] 随着网络技术的迅猛发展及网络安全的需要,常常要对数据包的内容识别和 分析,而随着被测内容的日渐复杂,采用基于字符串的多模式匹配算法逐渐被基于正则 表达式的多模式匹配算法所取代。与字符串相比,正则表达式能够非常灵活、简单、有 效地描述各种特征,使得特征串具有动态特性,因而能够被用于各种动态搜索。例如, " b "、" ab "、" aab "、" aaab "和" aaaab "等字符串可以简单地用一个正则表达式" a*b "来 表示。正则表达式有两种实现方式,一种为非确定性有限状态机(Non-deterministic Finite Automation,简称为 "NFA"),另一种为确定性有限状态机(Deterministic Finite Automation,简称为"DFA")。与NFA相比,DFA因具有较快的匹配速度而常成为首选的自动 机形式,但DFA需要很大的存储空间,成为当前DFA最严重的限制因素。
[0003] DFA的存储空间由状态数目和每个状态的迁移边条数共同决定,因此,可以针对这 两个因素对DFA进行压缩处理。本发明将有限状态机中包括的满足一定条件的至少两个连 续状态合并为复合状态,能够减少有限状态机的状态数目和迁移边总数,从而降低有限状 态机的存储空间。


【发明内容】

[0004] 本发明实施例提供了一种压缩正则表达式的方法、匹配字符串的方法及装置,能 够降低正则表达式的FA占用的内存空间。
[0005] 第一方面,提供了一种压缩正则表达式的方法,包括:确定正则表达式的有限自动 机FA包括的所有基本状态以及该所有基本状态之间的迁移关系;确定该所有基本状态中 能够合并为复合状态的至少两个基本状态,其中,该至少两个基本状态包括入态和出态,该 至少两个基本状态以该入态为起点并以该出态为终点依次迁移,第一基本状态的下一状态 不包括第二基本状态,且当第三基本状态具有除该依次迁移所对应的第一下一状态之外的 第二下一状态时,该第三基本状态的第二下一状态分别相同且分别在相同的标签下迁移至 该第二下一状态,该出态也在该相同的标签下迁移至该第二下一状态,其中,该第一基本状 态为该所有基本状态中除该至少两个基本状态之外的基本状态,该第二基本状态为该至少 两个基本状态中除该入态之外的基本状态,该第三基本状态为该至少两个基本状态中除该 出态之外的基本状态;根据该复合状态,生成该正则表达式的FA状态迁移表。
[0006] 结合第一方面,在第一种可能的实现方式中,该FA状态迁移表包括该第一其它状 态的基本迁移表项和该复合状态的复合迁移表项,其中,该FA状态迁移表的每个迁移表项 均包括匹配条件和该匹配条件对应的下一状态。
[0007] 结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,该复合状 态的复合迁移表项中的匹配条件为由该至少两个基本状态中的每个基本状态迁移到该第 一下一状态时的标签依次合并而成的复合标签,该匹配条件对应的下一状态为该出态的第 一下一状态,其中,该出态的第一下一状态为该出态具有的所有下一状态中除该第二下一 状态之外的下一状态。
[0008] 结合第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 当该第二基本状态具有该第二下一状态时,该FA状态迁移表还包括该复合状态的基本迁 移表项,该基本迁移表项中的匹配条件为该相同的标签,该匹配条件对应的下一状态为该 第二下一状态。
[0009] 第二方面,提供了一种匹配字符串的方法,包括:获取待匹配字符串和有限状态机 FA状态迁移表,该FA状态迁移表的迁移表项包括匹配条件和该匹配条件对应的下一状态, 且该FA状态迁移表包括基本状态的基本迁移表项和复合状态的复合迁移表项,该复合迁 移表项中的匹配条件能够与单个字符完全匹配,该基本迁移表项中的匹配条件能够与由至 少两个字符构成的字符串完全匹配;当当前状态为非接受状态时,确定该当前状态为基本 状态或复合状态,其中,该当前状态以FA的初始状态为起点;当该当前状态为复合状态时, 读取该待匹配字符串的未匹配部分的首字符;确定该FA状态迁移表中是否存在与该首字 符匹配的该复合状态的基本迁移表项;当该FA状态迁移表中存在与该首字符匹配的该复 合状态的基本迁移表项时,迁移至该匹配的基本迁移表项中的下一状态。
[0010] 结合第二方面,在第一种可能的实现方式中,该方法还包括:当该FA状态迁移表 中不存在与该首字符匹配的该复合状态的基本迁移表项时,确定该FA状态迁移表中是否 存在与该首字符部分匹配的该复合状态的复合迁移表项;当该FA状态迁移表中存在与该 首字符部分匹配的该复合状态的复合迁移表项时,依次读取该未匹配部分中的字符以获得 第一字符串,其中,该第一字符串以该首字符为起点且长度与该部分匹配的复合迁移表项 中的匹配条件相对应;确定该第一字符串是否与该部分匹配的复合迁移表项中的匹配条件 完全匹配;当该第一字符串与该部分匹配的复合迁移表项中的匹配条件完全匹配时,迁移 至该部分匹配的复合迁移表项中的下一状态。
[0011] 结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,该确定该 FA状态迁移表中是否存在与该首字符部分匹配的该复合状态的复合迁移表项,包括:分别 将该首字符与该FA状态迁移表中包括的该复合状态的至少一个复合迁移表项中的每个复 合迁移表项的匹配条件的起始部分进行匹配,以分别确定该首字符是否与该每个复合迁移 表项部分匹配;当该复合状态的至少一个复合迁移表项中存在与该首字符部分匹配的复合 迁移表项时,确定该FA状态迁移表中存在与该首字符部分匹配的该复合状态的复合迁移 表项。
[0012] 结合第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 该方法还包括:当该第一字符串不能够与该部分匹配的复合迁移表项中的匹配条件完全匹 配时,获取该第一字符串中与该部分匹配的复合迁移表项中的匹配条件不匹配的第一个字 符;确定该FA状态迁移表中是否存在与该不匹配的第一个字符匹配的该复合状态的基本 迁移表项;当该FA状态迁移表中存在与该不匹配的第一个字符匹配的该复合状态的基本 迁移表项时,迁移至该匹配的基本迁移表项中的下一状态;当FA状态迁移表中不存在与该 不匹配的第一个字符匹配的该复合状态的基本迁移表项时,确定该待匹配字符串的匹配结 果为失败。
[0013] 结合第二方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在 第四种可能的实现方式中,该方法还包括:当该未匹配部分中不存在长度与该部分匹配的 复合状态的复合迁移表项中的匹配条件相对应的该第一字符串时,确定该待匹配字符串的 匹配结果为失败。
[0014] 结合第二方面或结合第二方面的第一种至第四种可能的实现方式中的任一种可 能的实现方式,在第五种可能的实现方式中,该方法还包括:当该当前状态为基本状态时, 读取该待匹配字符串的未匹配部分的首字符;确定该FA状态迁移表中是否存在与该首字 符匹配的该基本状态的基本迁移表项;当该FA状态迁移表中不存在与该首字符匹配的该 基本状态的基本迁移表项时,确定该待匹配字符串的匹配结果为失败。
[0015] 第三方面,提供了一种压缩正则表达式的装置,包括:第一确定模块,用于确定正 则表达式的有限自动机FA包括的所有基本状态以及该所有基本状态之间的迁移关系;第 二确定模块,用于确定该第一确定模块确定的所有基本状态中能够合并为复合状态的至少 两个基本状态,其中,该至少两个基本状态包括入态和出态,该至少两个基本状态以该入态 为起点并以该出态为终点依次迁移,第一基本状态的下一状态不包括第二基本状态,且当 第三基本状态具有除该依次迁移所对应的第一下一状态之外的第二下一状态时,该第三基 本状态的第二下一状态分别相同且分别在相同的标签下迁移至该第二下一状态,该出态也 在该相同的标签下迁移至该第二下一状态,其中,该第一基本状态为该所有基本状态中除 该至少两个基本状态之外的基本状态,该第二基本状态为该至少两个基本状态中除该入态 之外的基本状态,该第三基本状态为该至少两个基本状态中除该出态之外的基本状态;生 成模块,用于根据该确定模块确定的该复合状态,生成该正则表达式的FA状态迁移表。
[0016] 结合第三方面,在第一种可能的实现方式中,该FA状态迁移表包括该第一基本状 态的基本迁移表项和该复合状态的复合迁移表项,其中,该FA状态迁移表的每个迁移表项 均包括匹配条件和该匹配条件对应的下一状态。
[0017] 结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,该复合状 态的复合迁移表项中的匹配条件为由该至少两个基本状态中的每个基本状态迁移到该第 一下一状态时的标签依次合并而成的复合标签,该匹配条件对应的下一状态为该出态的第 一下一状态,其中,该出态的第一下一状态为该出态具有的所有下一状态中除该第二下一 状态之外的下一状态。
[0018] 结合第三方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 当该第二基本状态具有该第二下一状态时,该FA状态迁移表还包括该复合状态的基本迁 移表项,该基本迁移表项中的匹配条件为该相同的标签,该匹配条件对应的下一状态为该 第二下一状态。
[0019] 第四方面,提供了一种匹配字符串的装置,包括:获取模块,用于获取待匹配字符 串和有限状态机FA状态迁移表,该FA状态迁移表的迁移表项包括匹配条件和该匹配条件 对应的下一状态,且该FA状态迁移表包括基本状态的基本迁移表项和复合状态的复合迁 移表项,该复合迁移表项中的匹配条件能够与单个字符完全匹配,该基本迁移表项中的匹 配条件能够与由至少两个字符构成的字符串完全匹配;第一确定模块,用于当该获取模块 获取的当前状态为非接受状态时,确定该当前状态为基本状态或复合状态,其中,该当前状 态以FA的初始状态为起点;读取模块,用于当该第一确定模块确定该当前状态为复合状态 时,读取该待匹配字符串的未匹配部分的首字符;第二确定模块,用于确定该FA状态迁移 表中是否存在与该读取模块读取的该首字符匹配的该复合状态的基本迁移表项;迁移模 块,用于当该第二确定模块确定该FA状态迁移表中存在与该首字符匹配的该复合状态的 基本迁移表项时,迁移至该匹配的基本迁移表项中的下一状态。
[0020] 结合第四方面,在第一种可能的实现方式中,该装置还包括:第三确定模块,用于 当该第二确定模块确定该FA状态迁移表中不存在与该首字符匹配的该复合状态的基本迁 移表项时,确定该FA状态迁移表中是否存在与该首字符部分匹配的该复合状态的复合迁 移表项;该读取模块还用于当该第三确定模块确定该FA状态迁移表中存在与该首字符部 分匹配的该复合状态的复合迁移表项时,依次读取该未匹配部分中的字符以获得第一字符 串,其中,该第一字符串以该首字符为起点且长度与该部分匹配的复合迁移表项中的匹配 条件相对应;该第三确定模块还用于确定该读取模块读取的该第一字符串是否与该部分匹 配的复合迁移表项中的匹配条件完全匹配;该迁移模块还用于当该第三确定模块确定该第 一字符串与该部分匹配的复合迁移表项中的匹配条件完全匹配时,迁移至该部分匹配的复 合迁移表项中的下一状态。
[0021] 结合第四方面的第一种可能的实现方式,在第二种可能的实现方式中,该第三确 定模块具体用于分别将该首字符与该FA状态迁移表中包括的该复合状态的至少一个复合 迁移表项中的每个复合迁移表项的匹配条件的起始部分进行匹配,以分别确定该首字符是 否与该每个复合迁移表项部分匹配;以及当该匹配单元该复合状态的至少一个复合迁移表 项中存在与该首字符部分匹配的复合迁移表项时,确定该FA状态迁移表中存在与该首字 符部分匹配的该复合状态的复合迁移表项。
[0022] 结合第四方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中, 该获取模块还用于当该第三确定模块确定该第一字符串不能够与该部分匹配的复合迁移 表项中的匹配条件完全匹配时,获取该第一字符串中与该部分匹配的复合迁移表项中的匹 配条件不匹配的第一个字符;该第三确定模块还用于确定该FA状态迁移表中是否存在与 该获取模块获取的该不匹配的第一个字符匹配的该复合状态的基本迁移表项;该迁移模块 还用于当该第三确定模块确定该FA状态迁移表中存在与该不匹配的第一个字符匹配的该 复合状态的基本迁移表项时,迁移至该匹配的基本迁移表项中的下一状态;该第一确定模 块还用于当该第三确定模块确定该FA状态迁移表中不存在与该不匹配的第一个字符匹配 的该复合状态的基本迁移表项时,确定该待匹配字符串的匹配结果为失败。
[0023] 结合第四方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在 第四种可能的实现方式中,该第一确定模块还用于当该未匹配部分中不存在长度与该部分 匹配的复合状态的复合迁移表项中的匹配条件相对应的该第一字符串时,确定该待匹配字 符串的匹配结果为失败。
[0024] 结合第四方面或结合第四方面的第一种至第四种可能的实现方式中的任一种可 能的实现方式,在第五种可能的实现方式中,该读取模块还用于当该第一确定模块确定该 当前状态为基本状态时,读取该待匹配字符串的未匹配部分的首字符;该第二确定模块还 用于确定该FA状态迁移表中是否存在与该读取模块读取的该首字符匹配的该基本状态的 基本迁移表项;该第一确定模块还用于当该第二确定模块确定该FA状态迁移表中不存在 与该首字符匹配的该基本状态的基本迁移表项时,确定该待匹配字符串的匹配结果为失 败。
[0025] 基于上述技术方案,本发明实施例提供的压缩正则表达式的方法、匹配字符串的 方法及装置,通过将连续的至少两个基本状态合并为复合状态,能够减少FA的状态数目和 迁移边数,从而降低FA占用的内存空间,提高系统的性能。

【专利附图】

【附图说明】
[0026] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例或现有技术 描述中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的 一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这 些附图获得其他的附图。
[0027] 图1是本发明实施例的压缩正则表达式的方法的示意性流程图。
[0028] 图2是本发明实施例的一个正则表达式的未经压缩的DFA状态图。
[0029] 图3是本发明实施例的压缩正则表达式的方法对图2所示的DFA状态图进行压缩 后获得的DFA状态图。
[0030] 图4是本发明实施例的另一个正则表达式的未经压缩的DFA状态图。
[0031] 图5是本发明实施例的压缩正则表达式的方法对图4所示的DFA状态图进行压缩 后获得的DFA状态图。
[0032] 图6是本发明实施例的再一个正则表达式的未经压缩的DFA状态图。
[0033] 图7是本发明实施例的压缩正则表达式的方法对图6所示的DFA状态图进行压缩 后获得的DFA状态图。
[0034] 图8是本发明实施例的匹配字符串的方法的示意性流程图。
[0035] 图9是本发明实施例的匹配字符串的方法的另一示意性流程图。
[0036] 图10是本发明实施例的匹配字符串的方法的再一示意性流程图。
[0037] 图11是本发明另一实施例的匹配字符串的方法的示意性流程图。
[0038] 图12是本发明实施例的压缩正则表达式的装置的示意性框图。
[0039] 图13是本发明实施例的匹配字符串的装置的示意性框图。
[0040] 图14是本发明实施例的匹配字符串的装置的另一示意性框图。
[0041] 图15是本发明另一实施例的压缩正则表达式的装置的示意性框图。
[0042] 图16是本发明另一实施例的匹配字符串的装置的示意性框图。

【具体实施方式】
[0043] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发 明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实 施例,都应属于本发明保护的范围。
[0044] 图1是本发明实施例的压缩正则表达式的方法100的示意性流程图,该方法100 可以由独立装置执行,也可以由独立装置中的模块执行,为了便于描述,下面将该方法的执 行主体称为压缩正则表达式的装置,如图1所示,该方法100包括:
[0045] S110,确定正则表达式的有限自动机FA包括的所有基本状态以及该所有基本状 态之间的迁移关系;
[0046] S120,确定该所有基本状态中能够合并为复合状态的至少两个基本状态,其中,该 至少两个基本状态包括入态和出态,该至少两个基本状态以该入态为起点并以该出态为终 点依次迁移,第一基本状态的下一状态不包括第二基本状态,且当第三基本状态具有除该 依次迁移所对应的第一下一状态之外的第二下一状态时,该第三基本状态的第二下一状态 分别相同且分别在相同的标签下迁移至该第二下一状态,该出态也在该相同的标签下迁移 至该第二下一状态,其中,该第一基本状态为该所有基本状态中除该至少两个基本状态之 外的基本状态,该第二基本状态为该至少两个基本状态中除该入态之外的基本状态,该第 三基本状态为该至少两个基本状态中除该出态之外的基本状态;
[0047] S130,根据该复合状态,生成该正则表达式的FA状态迁移表。
[0048] 为了便于描述,可以将上述能够合并为复合状态的至少两个基本状态称为连续的 至少两个基本状态,该压缩正则表达式的装置将该连续的至少两个状态合并为一个复合状 态。
[0049] 因此,根据本发明实施例的压缩正则表达式的方法,通过将连续的至少两个基本 状态合并为复合状态,能够减少FA的状态数目和迁移边数,从而降低FA占用的内存空间, 提1?系统的性能。
[0050] 在本发明实施例中,将正则表达式的未经过任何压缩的FA所包括的状态称为基 本状态,FA包括的除该至少两个基本状态之外的其它状态称为第一基本状态,该至少两个 基本状态包括的除入态之外的其它状态称为第二基本状态,而将该至少两个基本状态包括 的除出态之外的其它状态称为第三基本状态,其中,该FA可以为DFA或NFA,本发明实施例 对此不作限定。
[0051] 在SllO中,可以具体通过确定该正则表达式的未经任何压缩的FA状态图来确定 FA的所有基本状态和该所有基本状态之间的迁移关系,FA可以由该所有基本状态中的某 一基本状态迁移到另一基本状态,其中,当FA处于某个基本状态时,FA在某个标签下迁移 至的状态称为该基本状态的下一状态,但本发明实施例不限于此。
[0052] 在S120中,该至少两个基本状态可以不包括该FA的接受状态,且该至少两个基本 状态包括的入态为迁移到该至少两个基本状态的入口,即FA可以由除该至少两个基本状 态之外的第一状态迁移到该至少两个基本状态中的入态,然后由该入态依次迁移到第二基 本状态,而无法由该第一基本状态直接迁移到该第二基本状态,相应地,该第一基本状态的 下一状态可以包括该入态,但不包括该第二基本状态;此外,该FA可以由该至少两个基本 状态中的出态迁移到该第一基本状态,相应地,该出态可以具有至少一个下一状态,而除该 出态之外的第二基本状态可以只具有一个下一状态,即该至少两个基本状态之间依次迁移 所对应的下一状态。
[0053] 可选地,当该第三基本状态具有第二下一状态时,即除了该依次迁移所对应的下 一状态之外的其它下一状态,该第三基本状态的第二下一状态可以分别相同,且该第三基 本状态在相同的标签下迁移到该相同的第二下一状态,该出态在该相同的标签下也迁移到 该相同的第二下一状态。其中,该第二下一状态可以为该至少两个基本状态中的某一个基 本状态,也可以为该第一基本状态中包括的状态,本发明实施例不限于此。
[0054] 在S130中,该压缩正则表达式的装置将该连续的至少两个基本状态合并为复合 状态后,可以获得该正则表达式的压缩后的FA,该压缩后的FA包括第一基本状态和复合状 态,相应地,该压缩正则表达式的装置可以根据该第一基本状态中包括的各个基本状态之 间的迁移关系以及该第一基本状态与复合状态之间的迁移关系,生成该正则表达式的FA 状态迁移表,但本发明实施例不限于此。
[0055] 可选地,当该压缩后的FA包括至少两个复合状态时,该FA也可以在该至少两个复 合状态之间迁移,但本发明实施例不限于此。可选地,该压缩正则表达式的装置可以采用现 有的压缩存储方式存储该FA状态迁移表,也可以采用其他存储方式存储该FA状态迁移表, 本发明实施例不限于此。
[0056] 可选地,该FA状态迁移表包括除该第一基本状态的基本迁移表项和该复合状态 的复合迁移表项,其中,该FA状态迁移表的每个迁移表项均包括匹配条件和该匹配条件对 应的下一状态。
[0057] 具体地,该FA状态迁移表可以只包括一个迁移表,该迁移表中包括该第一基本状 态和该复合状态的迁移表项;该FA状态迁移表也可以包括两个迁移表,其中一个迁移表包 括该第一基本状态的迁移表项,另一个迁移表包括该复合状态的迁移表项,但本发明实施 例不限于此。
[0058] 可选地,作为另一实施例,该复合状态的复合迁移表项中的匹配条件为由该至少 两个基本状态中的每个基本状态迁移到该第一下一状态时的标签依次合并而成的复合标 签,该匹配条件对应的下一状态为该出态的第一下一状态,其中,该出态的第一下一状态为 该出态具有的所有下一状态中除该第二下一状态之外的下一状态。
[0059] 其中,当该FA当前处于该复合状态时,在复合标签下,即该FA由该入态依次迁移 到出态并由出态迁移到第一下一状态所依次组成的字符串,该FA迁移到该出态的该第一 下一状态。该复合标签可以为由至少两个字符组成的字符串,例如,'abc'或'234'等等, 该复合标签也可以由字符和表达式组成,例如,'[b_e]jk',其中,该[b-e]表示字符的范围 位于'b'与'e'之间,但本发明实施例不限于此。
[0060] 可选地,作为另一实施例,当该第二基本状态具有该第二下一状态时,该FA状态 迁移表还包括该复合状态的基本迁移表项,该基本迁移表项中的匹配条件为该相同的标 签,该匹配条件对应的下一状态为该第二下一状态。
[0061] 其中,该至少两个基本状态在该相同的标签下分别迁移至该第二下一状态,等价 于该复合状态在该相同的标签下迁移至该第二下一状态。可选地,当合并为复合状态的至 少两个基本状态的第二下一状态均为第一基本状态时,该DFA状态迁移表中该复合状态的 基本迁移表项中的下一状态为该相同的第一基本状态;而当合并为复合状态的至少两个基 本状态的第二下一状态为该复合状态中的某一个基本状态时,在该DFA状态迁移表中,该 复合状态的基本迁移表项中的下一状态为该复合状态,但本发明实施例不限于此。
[0062] 因此,根据本发明实施例的压缩正则表达式的方法,通过将连续的至少两个基本 状态合并为复合状态,能够减少FA的状态数目和迁移边数,从而降低FA占用的内存空间, 提1?系统的性能。
[0063] 下面将结合具体例子对本发明实施例提供的压缩正则表达式的方法做更详细的 说明。图2是正则表达式(12110 115326 I 20237 11200)+9'的未经压缩的DFA状态图,该 DFA状态图中包括14个基本状态,其中,状态1为初始状态,状态O为接受状态,且该14个 基本状态中的各个基本状态之间的迁移关系由箭头所示,以状态1为例,当输入字符为图 中箭头所示的字符'2'时,DFA由状态1迁移到箭头所指示的状态2,该状态2即为状态1 在标签'2'下的下一状态。
[0064] 如图2所示,DFA在状态2、9、10和13之间依次迁移,其中,状态2为入态,状态13 为出态,状态2具有分别由状态1和状态5发出的两个入边,表明该状态2为两个第一基本 状态的下一状态,而状态9、状态10和状态13不具有除该依次迁移所构成的入边之外的其 它入边,表明状态9、状态10和状态13不是第一基本状态的下一状态;且状态2、状态9和 状态10不具有除该依次迁移所构成的第一迁移边之外的第二迁移边,表示这三个第三其 它基本状态不具有除该依次迁移所对应的第一下一状态之外的第二下一状态,因此,状态 2、9、10和13符合合并为复合状态的条件,能够被合并为一个复合状态。类似地,状态8、12 和11也符合合并为复合状态的条件。DFA在状态6、4和7之间也依次迁移,然而,由于状态 6具有两个下一状态,即在依次迁移时对应的第一下一状态(状态4)和第二下一状态(状态 7),其中,该第二下一状态所对应的标签为输入字符'0',而状态4和状态7不具有在标签 '〇'下迁移到该第二下一状态的迁移边,因此,状态6、状态4和状态7不符合合并为复合状 态的条件。
[0065] 由上面的描述可知,可以将状态2、9、10和13合并为复合状态s0,且将状态8、12 和11合并为复合状态sl,以生成如图3所示的压缩后的DFA状态图。其中,该复合状态SO 和si分别在复合标签'0237'和'326'下迁移到状态5,该复合标签'0237'由状态2、状态 9以及状态10依次迁移时的标签以及状态13迁移到下一状态时的标签依次合并而成,而复 合标签'326'由状态8、状态12和状态11的标签依次合并而成。相对应地,该压缩前和压 缩后的正则表达式的DFA状态迁移表分别如表1和表2所不,分别对应于图2和图3所不 的DFA状态图。
[0066] 如表1所示,该未经压缩的正则表达式的DFA状态迁移表记录了图2所示的各个 基本状态以及各基本状态分别在不同标签下迁移到的下一状态,如表2所示,该压缩后的 DFA迁移表包括两个迁移表,其中,迁移表(a)记录第一其它基本状态和该复合状态在由单 个字符组成的简单标签下迁移到的下一状态,而迁移表(b)记录该复合状态在由至少两个 字符串组成的复合标签下迁移到的下一状态;可选地,也可以将该迁移表(a)和迁移表(b) 合并为一个迁移表,但本发明实施例不限于此。
[0067] 因此,根据本发明实施例的压缩正则表达式的方法,通过将连续的至少两个基本 状态合并为复合状态,能够减少FA的状态数目和迁移边数,从而降低FA占用的内存空间, 提1?系统的性能。
[0068] 表1正则表达式(12110 115326 I 20237 11200)+9'未经压缩的DFA迁移表

【权利要求】
1. 一种压缩正则表达式的方法,其特征在于,包括: 确定正则表达式的有限自动机FA包括的所有基本状态以及所述所有基本状态之间的 迁移关系; 确定所述所有基本状态中能够合并为复合状态的至少两个基本状态,其中,所述至少 两个基本状态包括入态和出态,所述至少两个基本状态以所述入态为起点并以所述出态为 终点依次迁移,第一基本状态的下一状态不包括第二基本状态,且当第三基本状态具有除 所述依次迁移所对应的第一下一状态之外的第二下一状态时,所述第三基本状态的第二下 一状态分别相同且分别在相同的标签下迁移至所述第二下一状态,所述出态也在所述相同 的标签下迁移至所述第二下一状态,其中,所述第一基本状态为所述所有基本状态中除所 述至少两个基本状态之外的基本状态,所述第二基本状态为所述至少两个基本状态中除所 述入态之外的基本状态,所述第三基本状态为所述至少两个基本状态中除所述出态之外的 基本状态; 根据所述复合状态,生成所述正则表达式的FA状态迁移表。
2. 根据权利要求1所述的方法,其特征在于,所述FA状态迁移表包括所述第一基本状 态的基本迁移表项和所述复合状态的复合迁移表项,其中,所述FA状态迁移表的每个迁移 表项均包括匹配条件和所述匹配条件对应的下一状态。
3. 根据权利要求2所述的方法,其特征在于,所述复合状态的复合迁移表项中的匹配 条件为由所述至少两个基本状态中的每个基本状态迁移到所述第一下一状态时的标签依 次合并而成的复合标签,所述匹配条件对应的下一状态为所述出态的第一下一状态,其中, 所述出态的第一下一状态为所述出态具有的所有下一状态中除所述第二下一状态之外的 下一状态。
4. 根据权利要求2或3所述的方法,其特征在于,当所述第二基本状态具有所述第二下 一状态时,所述FA状态迁移表还包括所述复合状态的基本迁移表项,所述基本迁移表项中 的匹配条件为所述相同的标签,所述匹配条件对应的下一状态为所述第二下一状态。
5. -种匹配字符串的方法,其特征在于,包括: 获取待匹配字符串和有限状态机FA状态迁移表,所述FA状态迁移表的迁移表项包括 匹配条件和所述匹配条件对应的下一状态,且所述FA状态迁移表包括基本状态的基本迁 移表项和复合状态的复合迁移表项,所述复合迁移表项中的匹配条件能够与单个字符完全 匹配,所述基本迁移表项中的匹配条件能够与由至少两个字符构成的字符串完全匹配; 当当前状态为非接受状态时,确定所述当前状态为基本状态或复合状态,其中,所述当 前状态以FA的初始状态为起点; 当所述当前状态为复合状态时,读取所述待匹配字符串的未匹配部分的首字符; 确定所述FA状态迁移表中是否存在与所述首字符匹配的所述复合状态的基本迁移表 项; 当所述FA状态迁移表中存在与所述首字符匹配的所述复合状态的基本迁移表项时, 迁移至所述匹配的基本迁移表项中的下一状态。
6. 根据权利要求5所述的方法,其特征在于,所述方法还包括: 当所述FA状态迁移表中不存在与所述首字符匹配的所述复合状态的基本迁移表项 时,确定所述FA状态迁移表中是否存在与所述首字符部分匹配的所述复合状态的复合迁 移表项; 当所述FA状态迁移表中存在与所述首字符部分匹配的所述复合状态的复合迁移表项 时,依次读取所述未匹配部分中的字符以获得第一字符串,其中,所述第一字符串以所述首 字符为起点且长度与所述部分匹配的复合迁移表项中的匹配条件相对应; 确定所述第一字符串是否与所述部分匹配的复合迁移表项中的匹配条件完全匹配; 当所述第一字符串与所述部分匹配的复合迁移表项中的匹配条件完全匹配时,迁移至 所述部分匹配的复合迁移表项中的下一状态。
7. 根据权利要求6所述的方法,其特征在于,所述确定所述FA状态迁移表中是否存在 与所述首字符部分匹配的所述复合状态的复合迁移表项,包括: 分别将所述首字符与所述FA状态迁移表中包括的所述复合状态的至少一个复合迁移 表项中的每个复合迁移表项的匹配条件的起始部分进行匹配,以分别确定所述首字符是否 与所述每个复合迁移表项部分匹配; 当所述复合状态的至少一个复合迁移表项中存在与所述首字符部分匹配的复合迁移 表项时,确定所述FA状态迁移表中存在与所述首字符部分匹配的所述复合状态的复合迁 移表项。
8. 根据权利要求6或7所述的方法,其特征在于,所述方法还包括: 当所述第一字符串不能够与所述部分匹配的复合迁移表项中的匹配条件完全匹配时, 获取所述第一字符串中与所述部分匹配的复合迁移表项中的匹配条件不匹配的第一个字 符; 确定所述FA状态迁移表中是否存在与所述不匹配的第一个字符匹配的所述复合状态 的基本迁移表项; 当所述FA状态迁移表中存在与所述不匹配的第一个字符匹配的所述复合状态的基本 迁移表项时,迁移至所述匹配的基本迁移表项中的下一状态; 当FA状态迁移表中不存在与所述不匹配的第一个字符匹配的所述复合状态的基本迁 移表项时,确定所述待匹配字符串的匹配结果为失败。
9. 根据权利要求6至8中任一项所述的方法,其特征在于,所述方法还包括: 当所述未匹配部分中不存在长度与所述部分匹配的复合状态的复合迁移表项中的匹 配条件相对应的所述第一字符串时,确定所述待匹配字符串的匹配结果为失败。
10. 根据权利要求5至9中任一项所述的方法,其特征在于,所述方法还包括: 当所述当前状态为基本状态时,读取所述待匹配字符串的未匹配部分的首字符; 确定所述FA状态迁移表中是否存在与所述首字符匹配的所述基本状态的基本迁移表 项; 当所述FA状态迁移表中不存在与所述首字符匹配的所述基本状态的基本迁移表项 时,确定所述待匹配字符串的匹配结果为失败。
11. 一种压缩正则表达式的装置,其特征在于,包括: 第一确定模块,用于确定正则表达式的有限自动机FA包括的所有基本状态以及所述 所有基本状态之间的迁移关系; 第二确定模块,用于确定所述第一确定模块确定的所有基本状态中能够合并为复合状 态的至少两个基本状态,其中,所述至少两个基本状态包括入态和出态,所述至少两个基本 状态以所述入态为起点并以所述出态为终点依次迁移,第一基本状态的下一状态不包括第 二基本状态,且当第三基本状态具有除所述依次迁移所对应的第一下一状态之外的第二下 一状态时,所述第三基本状态的第二下一状态分别相同且分别在相同的标签下迁移至所述 第二下一状态,所述出态也在所述相同的标签下迁移至所述第二下一状态,其中,所述第一 基本状态为所述所有基本状态中除所述至少两个基本状态之外的基本状态,所述第二基本 状态为所述至少两个基本状态中除所述入态之外的基本状态,所述第三基本状态为所述至 少两个基本状态中除所述出态之外的基本状态; 生成模块,用于根据所述确定模块确定的所述复合状态,生成所述正则表达式的FA状 态迁移表。
12. 根据权利要求11所述的装置,其特征在于,所述FA状态迁移表包括所述第一基本 状态的基本迁移表项和所述复合状态的复合迁移表项,其中,所述FA状态迁移表的每个迁 移表项均包括匹配条件和所述匹配条件对应的下一状态。
13. 根据权利要求12所述的装置,其特征在于,所述复合状态的复合迁移表项中的匹 配条件为由所述至少两个基本状态中的每个基本状态迁移到所述第一下一状态时的标签 依次合并而成的复合标签,所述匹配条件对应的下一状态为所述出态的第一下一状态,其 中,所述出态的第一下一状态为所述出态具有的所有下一状态中除所述第二下一状态之外 的下一状态。
14. 根据权利要求12或13所述的装置,其特征在于,当所述第二基本状态具有所述第 二下一状态时,所述FA状态迁移表还包括所述复合状态的基本迁移表项,所述基本迁移表 项中的匹配条件为所述相同的标签,所述匹配条件对应的下一状态为所述第二下一状态。
15. -种匹配字符串的装置,其特征在于,包括: 获取模块,用于获取待匹配字符串和有限状态机FA状态迁移表,所述FA状态迁移表的 迁移表项包括匹配条件和所述匹配条件对应的下一状态,且所述FA状态迁移表包括基本 状态的基本迁移表项和复合状态的复合迁移表项,所述复合迁移表项中的匹配条件能够与 单个字符完全匹配,所述基本迁移表项中的匹配条件能够与由至少两个字符构成的字符串 完全匹配; 第一确定模块,用于当所述获取模块获取的当前状态为非接受状态时,确定所述当前 状态为基本状态或复合状态,其中,所述当前状态以FA的初始状态为起点; 读取模块,用于当所述第一确定模块确定所述当前状态为复合状态时,读取所述待匹 配字符串的未匹配部分的首字符; 第二确定模块,用于确定所述FA状态迁移表中是否存在与所述读取模块读取的所述 首字符匹配的所述复合状态的基本迁移表项; 迁移模块,用于当所述第二确定模块确定所述FA状态迁移表中存在与所述首字符匹 配的所述复合状态的基本迁移表项时,迁移至所述匹配的基本迁移表项中的下一状态。
16. 根据权利要求15所述的装置,其特征在于,所述装置还包括: 第三确定模块,用于当所述第二确定模块确定所述FA状态迁移表中不存在与所述首 字符匹配的所述复合状态的基本迁移表项时,确定所述FA状态迁移表中是否存在与所述 首字符部分匹配的所述复合状态的复合迁移表项; 所述读取模块还用于当所述第三确定模块确定所述FA状态迁移表中存在与所述首字 符部分匹配的所述复合状态的复合迁移表项时,依次读取所述未匹配部分中的字符以获得 第一字符串,其中,所述第一字符串以所述首字符为起点且长度与所述部分匹配的复合迁 移表项中的匹配条件相对应; 所述第三确定模块还用于确定所述读取模块读取的所述第一字符串是否与所述部分 匹配的复合迁移表项中的匹配条件完全匹配; 所述迁移模块还用于当所述第三确定模块确定所述第一字符串与所述部分匹配的复 合迁移表项中的匹配条件完全匹配时,迁移至所述部分匹配的复合迁移表项中的下一状 态。
17. 根据权利要求16所述的装置,其特征在于,所述第三确定模块具体用于分别将所 述首字符与所述FA状态迁移表中包括的所述复合状态的至少一个复合迁移表项中的每个 复合迁移表项的匹配条件的起始部分进行匹配,以分别确定所述首字符是否与所述每个复 合迁移表项部分匹配;以及当所述匹配单元所述复合状态的至少一个复合迁移表项中存在 与所述首字符部分匹配的复合迁移表项时,确定所述FA状态迁移表中存在与所述首字符 部分匹配的所述复合状态的复合迁移表项。
18. 根据权利要求16或17所述的装置,其特征在于,所述获取模块还用于当所述第三 确定模块确定所述第一字符串不能够与所述部分匹配的复合迁移表项中的匹配条件完全 匹配时,获取所述第一字符串中与所述部分匹配的复合迁移表项中的匹配条件不匹配的第 一个字符; 所述第三确定模块还用于确定所述FA状态迁移表中是否存在与所述获取模块获取的 所述不匹配的第一个字符匹配的所述复合状态的基本迁移表项; 所述迁移模块还用于当所述第三确定模块确定所述FA状态迁移表中存在与所述不匹 配的第一个字符匹配的所述复合状态的基本迁移表项时,迁移至所述匹配的基本迁移表项 中的下一状态; 所述第一确定模块还用于当所述第三确定模块确定所述FA状态迁移表中不存在与所 述不匹配的第一个字符匹配的所述复合状态的基本迁移表项时,确定所述待匹配字符串的 匹配结果为失败。
19. 根据权利要求16至18中任一项所述的装置,其特征在于,所述第一确定模块还用 于当所述未匹配部分中不存在长度与所述部分匹配的复合状态的复合迁移表项中的匹配 条件相对应的所述第一字符串时,确定所述待匹配字符串的匹配结果为失败。
20. 根据权利要求15至19中任一项所述的装置,其特征在于,所述读取模块还用于当 所述第一确定模块确定所述当前状态为基本状态时,读取所述待匹配字符串的未匹配部分 的首字符; 所述第二确定模块还用于确定所述FA状态迁移表中是否存在与所述读取模块读取的 所述首字符匹配的所述基本状态的基本迁移表项; 所述第一确定模块还用于当所述第二确定模块确定所述FA状态迁移表中不存在与所 述首字符匹配的所述基本状态的基本迁移表项时,确定所述待匹配字符串的匹配结果为失 败。
【文档编号】G06F17/30GK104424329SQ201310410575
【公开日】2015年3月18日 申请日期:2013年9月10日 优先权日:2013年9月10日
【发明者】胡晶, 翟素平 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1