正则表达式匹配的方法及装置的制作方法

文档序号:6575078阅读:194来源:国知局
专利名称:正则表达式匹配的方法及装置的制作方法
技术领域
本发明涉及网络通信领域,尤其涉及一种正则表达式匹配的方法及装置。
技术背景目前,越来越多的系统釆用正则表达式取代字符串来描述特征,所说的正 则表达式是一种形式语言,由常量和算子组成,常量和算子分别指示元字符的 集合和在这些集合上的运算。和字符串相比,正则表达式能够非常灵活、简单、有效地描述各种特征,使得特征具有动态特性,适合各种动态搜索。例如b, ab, aab, aaab, aaaab,...这一系歹iJ6勺字;f寻串净争征可k乂简单i也用一个正贝'J表达式alD来表示(这里*表示0到任意多个,3*即表示字符3可以重复0到任意多次)。在脚本语言Perl兼容的正则表达式(PCRE, Perl Compatible Regular Expression,)规范中有一类扩展语法称为反向参考或反向引用(Back Reference),反向引用是指对以前已经匹配上的子表达式的引用,引用的对 象是子表达式匹配的部分,而不是表达式本身,因此反向引用必须满足两个条 件1)在前面已经出现过;2)能够匹配上指定的正则表达式。举例来说,在 "([a-c])(de)x\1x\2,,这个正则表达式中,有两个圆括号包括的部分"([a-c])和 (de)"(其中a-c表示a或b或c),这两个括号中的内容是指发生反向引用时, 需要引用的对象;而"\1和\2"分别表示对([a-c)和(de)进行一次反向引用,即 检查输入字符串中当前位置开始的输入字符是否能够匹配([a-c])或(de)。可以注 意到,在特定的输入条件下,括号中的子表达式就是特定的字符串,由于反向 引用要求引用的部分必须是已经出现过的内容,因此,adexgx^§、 bdex乜x^、 cdexsx^这样的输入字符串就能够匹配上给定的正则表达式(下划线部分可以满足反向引用定义中给出的两个条件);而字符串adexbx^就无法匹配上正则 表达式,这是因为b虽然可以匹配上a-c,但是在前面并没有出现过,就不能满 足条件1。另外,在现有的Perl5.10和PCRE7.0中,"V'符号后跟一个^t字有二义性 即可以表示反向引用,又可以表示八进制数。可以用'、g《数字F这种形式来明确 表示反向引用,为简化表述,后续简单地用"\"+数字来表示反向引用。现有技术中,将判断输入内容中是否包含正则表达式所表示规则的操作称 为正则表达式匹配, 一般是用输入字符串来表示正则表达式匹配系统的输入参 数,用匹配结果来表示正则表达式匹配系统的输出结果。现有的正则表达式匹 配方法一般有两大类 一类基于非确定性有限状态机(NFA, Non-deterministic Finite Automation);另一类基于确定性有限状态冲几(DFA, Deterministic Finite Automation) 。 NF财同一个输入字符允许有多个不同的转移,而DF财同一 个输入字符只能有唯一的转移,因此NFA在一个转移不匹配输入字符的情况 下,需要回退尝试另外的转移,只有在所有转移都不匹配时才认为不匹配;而 DFA只要在转移不匹配输入字符时,就可以直接认为不匹配。所以DFA的匹配 速度快,但DFA并不支持反向引用;NFA虽然支持反向引用,但是存在最坏情 况下匹配性能很差的问题。现有技术中,在一些诸如实时网络检测等对性能要求较高的应用中,常采 用现场可编程门阵列(FPGA, Field Programmable Gate Array)或专用集成 电路(ASIC, Application Specific Integrated Circuit)等器件来实现正则表达 式匹配系统。由于NFA的不确定性,使其很难在这些器件上实现,因此目前在 器件上实现正则表达式匹配一般都是基于DFA来进行的,但是由于DFA并不支 持反向引用,所以影响了 D FA匹配系统的规则处理能力。发明内容本发明实施例提供了 一种正则表达式匹配的方法及装置,能够使DFA匹配提高了DFA匹配系统的规则处理能力,具有很高的实 用价值。本发明实施例提供了一种正则表达式匹配的方法,包括 在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在所述状态节点上^:殳置引用标识;如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的 字符存^ft到所述位置标识对应的引用緩存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标 识对应的引用緩存中保存的字符进行比较,判断该当前输入的字符是否匹配。本发明实施例还提供了一种正则表达式匹配的装置,包括DFA状态信息设置单元,用于在将正则表达式编译为确定性有限状态机 DFA的过程中,在所述DFA的状态节点或状态节点的转移边上"^殳置位置标识, 并在状态节点上^:置引用标识;引用緩存单元,用于在当前状态节点或状态节点转移边上的位置标识有效 时,将当前输入的字符存储到所述位置标识对应的引用緩存中;反向引用匹配单元,用于在当前状态节点上的引用标识有效时,将当前输 入的字符和所述? 1用标识对应的引用緩存单元中所保存的字符进行比较,判断 该当前输入的字符是否匹配。由上述所提供的技术方案可以看出,在将正则表达式编译为确定性有限状 态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置有位置 标识,并在状态节点上设置有引用标识;这样,如果当前状态节点或状态节点 转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引 用緩存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述 引用标识对应的引用緩存中保存的字符进行比较,判断该当前输入的字符是否匹配。上述的技术方案就可以使DFA匹配系统支持反向引用,同时对现有的存 储结构和引擎架构的改动都较小,从而提高了DFA匹配系统的规则处理能力, 具有很高的实用价值。


图1为本发明实施例1所提供正则表达式匹配方法的流程示意图; 图2为本发明实施例1所举的第 一实例中DFA状态机对输入字符串的匹配 过程示意图;图3为本发明实施例1所举的第二实例中DFA状态机对输入字符串的匹配 过程示意图;图4为本发明实施例1所举的第三实例中DFA状态机对输入字符串的匹配 过程示意图;图5为本发明实施例1所举的第四实例中DFA状态机对输入字符串的匹配 过程示意图;图6为本发明实施例1所举的第五实例中DFA状态机对输入字符串的匹配 过程示意图;图7为本发明实施例2所提供正则表达式匹配装置的结构示意图。
具体实施方式
本发明实施例提供了 一种正则表达式匹配的方法及装置。在将正则表达式 编译为确定性有限状态机DFA的过程中,在相关DFA的状态上加入位置标识和 引用标识的信息;在进行匹配操作时,如果遇到位置标识有效的状态,那么就 根据位置标识将当前输入的字符写入该位置标识对应的引用緩存中;如果遇到 引用标识有效的状态,那么就根据该引用标识找到相应的引用緩存,将当前输 入的字符串和相应引用緩存中保存的字符串进行比较,判断该当前输入的字符 是否匹配。通过上述技术方案的实施,就可以使DFA匹配系统支持反向引用,从而提高了DFA匹配系统的规则处理能力,具有很高的实用价值。实施例1:为更好的描述本发明实施例,现结合附图对本发明的具体实施 例进行说明,如图1所示为本实施例1所提供正则表达式匹配方法的流程示意 图,所述方法包括步骤11:在确定性有限状态机DFA的状态节点或状态节点的转移边上设置 位置标识,并在状态节点上{殳置引用标识。在该步骤中,在将正则表达式编译为确定性有限状态机DFA的过程中,可 以在DFA的状态节点或状态节点的转移边上i殳置位置标识,并在状态节点上设 置引用标识。具体来说,可以找出该正则表达式中的每个反向引用,并将所述 反向引用的引用值作为发生反向引用的DFA状态节点上的引用标识;然后再找 出每个反向引用所包括的内容,将该引用标识作为所包括内容在DFA中的前一 个状态节点或前一个状态节点的转移边上的位置标识。上述位置标识指的是对一个正则表达式中出现的被引用的括号部分按照 某种顺序进行的重新编码,实际上就是为需要引用比较的各个内容部分指定一 个身份编号,对于不需要引用的部分,是不需要进行位置标识的。上述的引用 标识指的是对一个正则表达式中出现的需要引用的部分,例如用"\" +数字所 表示的部分,按照某种顺序进行的重新编码,实际上就是指定需要和之前出现 的某个括号中的内容进行匹配比较。在具体实现过程中,可按如下方式来进行设置首先对正则表达式进行扫描,找出所述正则表达式中的每个反向引用;设置第一指定值和第二指定值; 其中,所述第一指定值小于所述第二指定值;将所找出的每个反向引用的引用 值组成一个集合,为所述集合中的每个元素按顺序分配一个从第三指定值开始 的连续引用编号;遍历所述集合,用所述引用编号加上所述第一指定值来替换 每个反向引用所引用的内容前的括号,并作为非确定性有限状态机NFA转移边 上的字符;将所述引用编号加上所述第二指定值来替换所述正则表达式中的每个反向引用,并作为NFA转移边上的字符;在NFA向DFA进行转换时,如果转 移边上的字符大于所述第一指定值且小于所述第二指定值,则将字符减去所述 第一指定值得到的值作为位置标识增加到DFA的状态节点或状态节点的转移 边上;如果转移边上的字符大于所述第二指定值,则将字符减去所述第二指定 值得到的值作为引用标识增加到DFA的状态节点上。其中,上述的第一指定值和第二指定值是为了将反向引用部分和其引用的 括号(引用的内容)转换为特殊字符,这样可以在后继转换成DFA的过程中使 用;上述的第三指定值可以设置成任意的数字,例如为了方便表述,可将其设 置为从1开始;除上述所举出的实例外,在实际应用过程中,也可以采用其他 类似方法或步骤来实现,这并不影响本发明的实质内容。另外,在上述设置过程中,还可以根据反向引用的引用值大小对其顺序编用标识。举例来说,以A(BCIDE)(A+B)([a-c])FVIG。这个正则表达式为例,\1表示 在这个位置需要反向引用(BCIDE)中的内容,\3表示在这个位置需要反向引用 ([a-c])中的内容;然后将引用值1和3重新顺序编码得到引用标识分别为1和2; 而(A+B)不会被引用,故不需要进行位置标识。之所以需要进行这样处理,是 因为假设一个正则表达式中包含有100个括号部分,而只需要对第1个括号和第 100个括号进行反向引用,如果不对反向引用的括号部分进行重新标识,那么 我们需要设置10O个緩存和原来的每个括号进行对应,而经过重新顺序编码后, 我们就只需要设置2个緩存,这样就可以大大节省所需要的资源。在经过上述的设置操作之后,就可以进行如下的匹配操作。步骤12:根据所设置的位置标识和引用标识,将当前输入字符和反向引用 部分的内容进行匹配才喿作。在该步骤中,在经过上述步骤11的设置后,就可以根据所设置的位置标识ii和引用标识,将当前输入字符和反向引用部分的内容进行匹配操作。具体来说, 如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符
存储到所述位置标识对应的引用緩存中;如果当前状态节点上的引用标识有
效,则将当前输入的字符和所述引用标识对应的引用緩存中保存的字符进行比 较,判断该当前输入的字符是否匹配。
上述位置标识有效可以根据实际需要来进行定义,例如当位置标识不为O 时,可以定义该位置标识有效,当位置标识为0时,则定义为无效;同样的, 当引用标识不为0时,也可以定义该引用标识有效,当引用标识为O时,则定义 为无效。
为了更好的描述匹配过程,下面以具体的实例来进行说明,例如以正则表 达式A(BCIDE)(A+B)([a-c])R1 GV3所对应的DFA状态机为例,如图2所示为所举 的第一实例中DFA状态机对输入字符串的匹配过程示意图,图中状态节点上 方框中的数值为位置标识和引用标识,为了区分两者,在引用标识的数值前加 了 "\";在状态节点1、 2、 3、 6、 8和9上存在相关状态的变化,即在该状态 节点上需要保存位置标识或需要保存引用标识。
图2中状态节点1, 2, 3, 6的位置标识不为0,表示位置标识有效,也就 是说在这些状态上,如果输入字符有效,就需要将当前输入的字符写入到相应 的緩存中,因此,输入的字符DE被保存到緩存1中,字符C被保存在緩存2中; 状态节点8和9的引用标识不为0,表示引用标识有效,也就是说在8和9发生了 反向引用,需要检查当前输入的字符是否能够和对应緩存中的内容相匹配,例 如在状态节点8就需要将当前输入的两个字符DE和緩存1中所存储的内容进行 比较,判断该当前输入的字符是否匹配,从而完成相应的反向引用匹配操作。
另外,对于正则表达式中出现括号嵌套的情况,需要考虑发生嵌套的括号 都被反向引用的情况,在编译DFA状态机时,内层括号包括的部分所对应的状 态上应该标注出所有发生嵌套的位置标识;同时在匹配时,如果遇到状态节点上有多个位置标识不为0,那么就需要将下一个字符同时写入到这些位置标识 所对应的緩存中。
例如,以正则表达式A((BI[a-c])D(EF))GVim3所对应的DFA状态机为例, 如图3所示为所举的第二实例中DFA状态机对输入字符串的匹配过程示意图, 图中在字符A后面紧跟的左括号和EF前的左括号分别标识为1和2,表示 (BI[a-c])D(EF))中出现的字符需要记录到緩存1中,而(EF)中出现的字符不仅 要记录到緩存1中,还需要记录到緩存2中。在对反向引用部分进行匹配时,在 状态节点8上,就将当前输入的字符BDEF和緩存1中存储的内容进行匹配;在 状态节点9上,就将当前输入的字符EF和緩存2中存储的内容进行匹配。
再考虑另一个在状态节点转移边上设置位置标识的例子,如图4所示为所 举的第三实例中DFA状态机对输入字符串的匹配过程示意图,图中正则表达式 为A(BI(CD))EVIF。,左边的示意图是在状态节点上增加位置标识而生成的 DFA,假如输入的字符串为"ABEBFB",按照左边的DFA,是能够匹配的;但 是第4个字符B虽然能够匹配VI所引用的(BI(CD)),但第6个字符已却无法匹配\2 所引用的(CD),因此是错误的。造成错误的原因是在状态节点上标记多个位置 标识时,无法区分下一个输入字符应该存放到哪个緩存中。
而在上述图4右边的示意图中,可以将位置标识设置在状态节点的转移边 上,这样就可以明确转移边上的字符应该存》文到哪个緩存中,此时输入字符 "ABEBFB"无法匹配,但是输入字符"ACDECDFCD"是可以匹配的。
另外,当同一状态上存在多个反向引用时,还可以在所述状态节点上设置 多个引用标识所发生的顺序。举例来说,以正则表达式 A(BCIDE)(A+B)([a-c])F、3Vl所对应的匹配过程为例,在输入字符F后跳转到的 状态上需要连续发生两次反向引用操作,第1次需要引用([a-c]),第2次需要引 用(BCIDE)。那么此时除了需要在状态上标记两个引用标识之外,还需要记录 下两个引用标识所发生的顺序,具体可以采用如下的方式来进行
13例如,可以在状态节点上按照反向引用出现的先后顺序,依次为所述反向 引用分配由小到大的引用标识,并设定数值小的引用标识优先进^f亍处理。如图
5所示为所举的第四实例中DFA状态机对输入字符串的匹配过程示意图,图5 中所对应的正则表达式为A(BCIDE)(A+B)([a-c])FV3";在生成DFA时,为出 现在前面的反向引用分配较小的引用标识,并规定编号较小的引用緩存优先访 问。即为"\3"分配引用标识\1,为"\1"分配引用标识\2;在反向引用匹配时, 引用标识为VI的优先处理,即在状态节点8优先将所输入的字符"c"和緩存1 中保存的字符进行比较,然后再对引用标识为\2的部分进行处理,即将所输入 的字符"DE"和緩存2中保存的字符进行比较。
除上述设置方式外,还可以在状态节点上按照反向引用的引用值大小,依 次为所述反向引用分配由小到大的引用标识,并在所分配的引用标识上记录各 反向引用发生的先后顺序。
举例来说,如图6所示为所举的第五实例中DFA状态机对输入字符串的匹 配过程示意图,图中所对应的正则表达式为A(BCIDE)(A+B)([a-c])F、3VI;在 生成DFA时,除了为反向引用分配引用标识外,在出现多个反向引用的状态上 记录各反向引用所发生的先后顺序,即在图6中的状态节点8上同时记录下反向 引用标识和发生的先后顺序。在状态节点8上进行反向引用匹配时,首先对先 发生的引用标识为\2的进行处理,即将当前输入的字符"c"和緩存2中保存的 字符进行比较;然后再对后发生的引用标识为VI的进行处理,即将当前输入的 字符"DE"和緩存1中保存的字符进行比较。
值得注意的是,上述过程是为了说明同 一个状态上有多个反向引用的情 况,在上述所举出的例子中,位置标识可以标注在状态节点,也可以标注在状 态节点的转移边上,具体可以根据实际的规则情况来进行处理,但这并不影响 本发明的实质内容。
综上所述,通过以上方法实施例1的技术方案,就可以使DFA匹配系统支持反向引用,同时对现有的存储结构和引擎架构的改动都较小,从而提高了
DFA匹配系统的规则处理能力,具有很高的实用价值。
另外,在本实施例1的步骤12中,将当前输入的字符存储到所述位置标识 对应的引用緩存中,具体可以有如下的存储方式
方式1:将当前输入的字符本身直接保存到所述位置标识对应的引用緩存
中;
方式2:将当前输入字符的存储位置保存到所述位置标识对应的引用援存
中;
方式3:将需要引用的当前输入字符串的起始字符和结束字符的存储位置 对保存到所述位置标识对应的引用i爰存中;
方式4:将需要引用的当前输入字符串的起始字符和该输入字符串的总长 度保存到所述位置标识对应的引用緩存中。
而在判断该当前输入的字符是否匹配的过程中,比较过程还可以采用同步 方式或异步方式来进行,具体来说
同步方式就是在判断该当前输入的字符匹配成功后,再对所输入的下一个 字符进行操作。在具体实现过程中,同步方式比较适合反向引用部分的长度较 短的情况,此时引用緩存的保存方式可以考虑采用上述方式1和方式2。
异步方式就是先跳过进行匹配判断的该当前输入的字符,对所输入的下一 个字符进行操作,再根据该当前输入的字符的匹配结果来决定是否继续进行后 继的匹配操作。在具体实现过程中,异步方式比较适合反向引用部分的长度较 长的情况,此时引用緩存的保存方式可以考虑采用上述方式3和方式4。
实施例2:本发明实施例2提供了一种正则表达式匹配的装置,如图7所示 为本实施例2所提供装置的结构示意图,所述装置包括DFA状态信息设置单元 71、引用緩存单元72和反向引用匹配单元73,其中
所述DFA状态信息设置单元71用于在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标 识,并在状态节点上设置引用标识。具体进行设置的方式见以上方法实施例1 中所述。
所述引用緩存单元72用于在当前状态节点或状态节点转移边上的位置标 识有效时,将当前输入的字符存储到所述位置标识对应的引用緩存中。具体进 行存储的方式见以上方法实施例1中所述。
所述反向引用匹配单元73用于在当前状态节点上的引用标识有效时,将当 前输入的字符和所述引用标识对应的引用緩存单元中所保存的字符进行比较, 判断该当前输入的字符是否匹配。具体对当前输入的字符进行匹配的方式见以 上方法实施例1中所述。
另外,在所述DFA状态信息设置单元71中还可包括引用标识设置模块711 和位置标识设置模块712,其中
所述引用标识设置模块711用于找出正则表达式中的每个反向引用,并将 所述反向引用的引用值作为发生反向引用的DFA状态节点上的引用标识。
所述位置标识设置模块712用于找出所述每个反向引用所包括的内容,将 所述引用标识作为所包括内容在DFA中的前一个状态节点或前一个状态节点 的转移边上的位置标识。
另外,为了标注同一状态上多个反向引用所发生的顺序,在所述DFA状态 信息设置单元71中还可包括顺序设置模块713,该顺序设置模块713用于当同 一状态上存在多个反向引用时,在所述状态节点上设置多个引用标识所发生的 顺序。具体进行设置的方式见以上方法实施例1中所述。
上述引用緩存单元72有多种存储字符的方式,具体包括直接保存当前输 入的字符本身;或保存当前输入字符的存储位置;或保存当前输入字符的起始 字符和结束字符的存储位置对;或保存当前输入字符的起始字符和该输入字符 的总长度。另夕卜,在上述装置中还可包括输入字符串緩存单元74,该输入字符串緩存 单元74用于保存需要进行匹配的输入字符串,并将其传送给所述反向引用匹配 单元73和所述引用緩存单元72。如果DFA匹配引擎是用在报文检测的场合,那 么上述输入字符串緩存单元74所保存的就是从前端模块所接收的数据报文。
上述正则表达式匹配的装置可集成设置于确定性有限状态机DFA匹配引 擎中;也可设置成单独的功能实体,与DFA匹配引擎保持连接关系。
另外,上述实施例2所述的装置是以FPGA为例进行说明的,但在ASIC等 其他器件中也是能够实现的,此处就不再赘述。
值得注意的是,上述装置实施例中,所包括的各个单元只是按照功能逻辑 进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另夕卜, 各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护 范围。
另外,本领域普通技术人员可以理解实现上述方法实施例1中的全部或部 分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计 算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
综上所述,本发明实施例可以使DFA匹配系统支持反向引用,同时对现有 的存储结构和引擎架构的改动都较小,从而提高了DFA匹配系统的规则处理能 力,具有很高的实用价值。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内, 可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明 的保护范围应该以权利要求的保护范围为准。
权利要求
1、一种正则表达式匹配的方法,其特征在于,所述方法包括在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在所述状态节点上设置引用标识;如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引用缓存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标识对应的引用缓存中保存的字符进行比较,判断该当前输入的字符是否匹配。
2、 如权利要求1所述的方法,其特征在于,所述在所述DFA的状态节点或 状态节点的转移边上设置位置标识,并在状态节点上设置引用标识,具体包括找出正则表达式中的每个反向引用,并将所述反向引用的引用值作为发生 反向引用的确定性有限状态机DFA状态节点上的引用标识;找出所述每个反向引用所包括的内容,将所述引用标识作为所包括内容在 DFA中的前一个状态节点或前一个状态节点的转移边上的位置标识。
3、 如权利要求2所述的方法,其特征在于,所述将所述反向引用的引用值 作为发生反向引用的确定性有限状态机DFA状态节点上的引用标识,具体包 括根据所述反向引用的引用值大小对其顺序编号,将所述编号作为发生反向 引用的确定性有限状态机DFA状态节点上的引用标识。
4、 如权利要求1或2所述的方法,其特征在于,所述在所述DFA的状态节 点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识,具体 包括对正则表达式进行扫描,找出所述正则表达式中的每个反向引用;设置第一指定值和第二指定值;其中,所述第一指定值小于所述第二指定值;将所找出的每个反向引用的引用值组成一个集合,为所述集合中的每个元素按顺序分配一个从第三指定值开始的连续引用编号;遍历所述集合,用所述引用编号加上所述第一指定值来替换每个反向引用 所参考的内容前的括号,并作为非确定性有限状态机NFA转移边上的字符;将所述引用编号加上所述第二指定值来替换所述正则表达式中的每个反 向引用,并作为NFA转移边上的字符;在NFA向DFA进行转换时,如果所述转移边上的字符大于所述第一指定值 且小于所述第二指定值,则将所述转移边上的字符减去所述第一指定值所得到 的值作为位置标识增加到DFA的状态节点或状态节点的转移边上;如果所述转 移边上的字符大于所述第二指定值,则将所述转移边上的字符减去所述第二指 定值所得到的值作为引用标识增加到DFA的状态节点上。
5、 如权利要求1所述的方法,其特征在于,当同一状态上存在多个反向引 用时,所述方法还包括在所述状态节点上设置多个引用标识所发生的顺序。
6、 如权利要求5所述的方法,其特征在于,所述在所述状态节点上设置多 个引用标识所发生的顺序,具体包括在所述状态节点上按照反向引用出现的先后顺序,依次为所述反向引用分 配由小到大的引用标识,并设定数值小的引用标识优先进行处理。
7、 如权利要求5所述的方法,其特征在于,所述在所述状态节点上设置多 个引用标识所发生的顺序,具体包括在所述状态节点上按照反向引用的引用值大小,依次为所述反向引用分配 由小到大的引用标识,并在所分配的引用标识上记录各反向引用发生的先后顺 序。
8、 如权利要求1所述的方法,其特征在于,在所述判断该当前输入的字符是否匹配的过程中,所述方法还包括在判断该当前输入的字符匹配成功后,再对所输入的下一个字符进行操 作;或,跳过进行匹配判断的该当前输入的字符,对所输入的下一个字符进行操 作,再根据该当前输入的字符的匹配结果来决定是否继续进行后继的匹配操 作。
9、 一种正则表达式匹配的装置,其特征在于,包括 DFA状态信息设置单元,用于在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识, 并在状态节点上设置? l用标识;引用緩存单元,用于在当前状态节点或状态节点转移边上的位置标识有效 时,将当前输入的字符存储到所述位置标识对应的引用緩存中;反向引用匹配单元,用于在当前状态节点上的引用标识有效时,将当前输 入的字符和所述引用标识对应的引用緩存单元中所保存的字符进行比较,判断 该当前输入的字符是否匹配。
10、 如权利要求9所述的装置,其特征在于,所述DFA状态信息设置单元 包括引用标识设置模块,用于找出正则表达式中的每个反向引用,并将所述反 向引用的引用值作为发生反向引用的DFA状态节点上的引用标识;位置标识设置模块,用于找出所述每个反向引用所包括的内容,将所述引 用标识作为所包括内容在DFA中的前一个状态节点或前一个状态节点的转移 边上的位置标识。
11、 如权利要求9所述的装置,其特征在于,所述DFA状态信息设置单元 中还包括顺序设置模块,用于当同一状态上存在多个反向引用时,在所述状态节点 上设置多个引用标识所发生的顺序。
12、如权利要求9-11其中之一所述的装置,其特征在于,所述装置还包括 输入字符串緩存单元,用于保存需要进行匹配的输入字符串,并将其传送 给所述反向引用匹配单元和所述引用緩存单元。
全文摘要
本发明实施例提供了一种正则表达式匹配的方法及装置。所述方法具体包括在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识;如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引用缓存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标识对应的引用缓存中保存的字符进行比较,判断该当前输入的字符是否匹配。通过上述技术方案的实施,就可以使DFA匹配系统支持反向引用,同时对现有的存储结构和引擎架构的改动都较小,从而提高了DFA匹配系统的规则处理能力,具有很高的实用价值。
文档编号G06F17/30GK101599074SQ20091008832
公开日2009年12月9日 申请日期2009年6月26日 优先权日2009年6月26日
发明者浩 王, 胡新宇, 建 陈 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1