CN101599074A - 正则表达式匹配的方法及装置 - Google Patents
正则表达式匹配的方法及装置 Download PDFInfo
- Publication number
- CN101599074A CN101599074A CNA2009100883244A CN200910088324A CN101599074A CN 101599074 A CN101599074 A CN 101599074A CN A2009100883244 A CNA2009100883244 A CN A2009100883244A CN 200910088324 A CN200910088324 A CN 200910088324A CN 101599074 A CN101599074 A CN 101599074A
- Authority
- CN
- China
- Prior art keywords
- state node
- character
- dfa
- station location
- location marker
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种正则表达式匹配的方法及装置。所述方法具体包括:在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识;如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引用缓存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标识对应的引用缓存中保存的字符进行比较,判断该当前输入的字符是否匹配。通过上述技术方案的实施,就可以使DFA匹配系统支持反向引用,同时对现有的存储结构和引擎架构的改动都较小,从而提高了DFA匹配系统的规则处理能力,具有很高的实用价值。
Description
技术领域
本发明涉及网络通信领域,尤其涉及一种正则表达式匹配的方法及装置。
背景技术
目前,越来越多的系统采用正则表达式取代字符串来描述特征,所说的正则表达式是一种形式语言,由常量和算子组成,常量和算子分别指示元字符的集合和在这些集合上的运算。和字符串相比,正则表达式能够非常灵活、简单、有效地描述各种特征,使得特征具有动态特性,适合各种动态搜索。例如:b,ab,aab,aaab,aaaab,...这一系列的字符串特征可以简单地用一个正则表达式a*b来表示(这里*表示0到任意多个,a*即表示字符a可以重复0到任意多次)。
在脚本语言Perl兼容的正则表达式(PCRE,Perl Compatible RegularExpression,)规范中有一类扩展语法称为反向参考或反向引用(BackReference),反向引用是指对以前已经匹配上的子表达式的引用,引用的对象是子表达式匹配的部分,而不是表达式本身,因此反向引用必须满足两个条件:1)在前面已经出现过;2)能够匹配上指定的正则表达式。举例来说,在“([a-c])(de)x\1x\2”这个正则表达式中,有两个圆括号包括的部分“([a-c])和(de)”(其中a-c表示a或b或c),这两个括号中的内容是指发生反向引用时,需要引用的对象;而“\1和\2”分别表示对([a-c])和(de)进行一次反向引用,即检查输入字符串中当前位置开始的输入字符是否能够匹配([a-c])或(de)。可以注意到,在特定的输入条件下,括号中的子表达式就是特定的字符串,由于反向引用要求引用的部分必须是已经出现过的内容,因此,adexaxde、bdexbxde、cdexcxde这样的输入字符串就能够匹配上给定的正则表达式(下划线部分可以满足反向引用定义中给出的两个条件);而字符串adexbxde就无法匹配上正则表达式,这是因为b虽然可以匹配上a-c,但是在前面并没有出现过,就不能满足条件1。
另外,在现有的Perl 5.10和PCRE 7.0中,“\”符号后跟一个数字有二义性:即可以表示反向引用,又可以表示八进制数。可以用“\g{数字}”这种形式来明确表示反向引用,为简化表述,后续简单地用“\”+数字来表示反向引用。
现有技术中,将判断输入内容中是否包含正则表达式所表示规则的操作称为正则表达式匹配,一般是用输入字符串来表示正则表达式匹配系统的输入参数,用匹配结果来表示正则表达式匹配系统的输出结果。现有的正则表达式匹配方法一般有两大类:一类基于非确定性有限状态机(NFA,Non-deterministicFinite Automation);另一类基于确定性有限状态机(DFA,Deterministic FiniteAutomation)。NFA对同一个输入字符允许有多个不同的转移,而DFA对同一个输入字符只能有唯一的转移,因此NFA在一个转移不匹配输入字符的情况下,需要回退尝试另外的转移,只有在所有转移都不匹配时才认为不匹配;而DFA只要在转移不匹配输入字符时,就可以直接认为不匹配。所以DFA的匹配速度快,但DFA并不支持反向引用;NFA虽然支持反向引用,但是存在最坏情况下匹配性能很差的问题。
现有技术中,在一些诸如实时网络检测等对性能要求较高的应用中,常采用现场可编程门阵列(FPGA,Field Programmable Gate Array)或专用集成电路(ASIC,Application Specific Integrated Circuit)等器件来实现正则表达式匹配系统。由于NFA的不确定性,使其很难在这些器件上实现,因此目前在器件上实现正则表达式匹配一般都是基于DFA来进行的,但是由于DFA并不支持反向引用,所以影响了DFA匹配系统的规则处理能力。
发明内容
本发明实施例提供了一种正则表达式匹配的方法及装置,能够使DFA匹配系统支持反向引用,从而提高了DFA匹配系统的规则处理能力,具有很高的实用价值。
本发明实施例提供了一种正则表达式匹配的方法,包括:
在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在所述状态节点上设置引用标识;
如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引用缓存中;
如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标识对应的引用缓存中保存的字符进行比较,判断该当前输入的字符是否匹配。
本发明实施例还提供了一种正则表达式匹配的装置,包括:
DFA状态信息设置单元,用于在将正则表达式编译为确定性有限状态机DFA的过程中,在所述DFA的状态节点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识;
引用缓存单元,用于在当前状态节点或状态节点转移边上的位置标识有效时,将当前输入的字符存储到所述位置标识对应的引用缓存中;
反向引用匹配单元,用于在当前状态节点上的引用标识有效时,将当前输入的字符和所述引用标识对应的引用缓存单元中所保存的字符进行比较,判断该当前输入的字符是否匹配。
由上述所提供的技术方案可以看出,在将正则表达式编译为确定性有限状态机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的状态节点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识。具体来说,可以找出该正则表达式中的每个反向引用,并将所述反向引用的引用值作为发生反向引用的DFA状态节点上的引用标识;然后再找出每个反向引用所包括的内容,将该引用标识作为所包括内容在DFA中的前一个状态节点或前一个状态节点的转移边上的位置标识。
上述位置标识指的是对一个正则表达式中出现的被引用的括号部分按照某种顺序进行的重新编码,实际上就是为需要引用比较的各个内容部分指定一个身份编号,对于不需要引用的部分,是不需要进行位置标识的。上述的引用标识指的是对一个正则表达式中出现的需要引用的部分,例如用“\”+数字所表示的部分,按照某种顺序进行的重新编码,实际上就是指定需要和之前出现的某个括号中的内容进行匹配比较。
在具体实现过程中,可按如下方式来进行设置:首先对正则表达式进行扫描,找出所述正则表达式中的每个反向引用;设置第一指定值和第二指定值;其中,所述第一指定值小于所述第二指定值;将所找出的每个反向引用的引用值组成一个集合,为所述集合中的每个元素按顺序分配一个从第三指定值开始的连续引用编号;遍历所述集合,用所述引用编号加上所述第一指定值来替换每个反向引用所引用的内容前的括号,并作为非确定性有限状态机NFA转移边上的字符;将所述引用编号加上所述第二指定值来替换所述正则表达式中的每个反向引用,并作为NFA转移边上的字符;在NFA向DFA进行转换时,如果转移边上的字符大于所述第一指定值且小于所述第二指定值,则将字符减去所述第一指定值得到的值作为位置标识增加到DFA的状态节点或状态节点的转移边上;如果转移边上的字符大于所述第二指定值,则将字符减去所述第二指定值得到的值作为引用标识增加到DFA的状态节点上。
其中,上述的第一指定值和第二指定值是为了将反向引用部分和其引用的括号(引用的内容)转换为特殊字符,这样可以在后继转换成DFA的过程中使用;上述的第三指定值可以设置成任意的数字,例如为了方便表述,可将其设置为从1开始;除上述所举出的实例外,在实际应用过程中,也可以采用其他类似方法或步骤来实现,这并不影响本发明的实质内容。
另外,在上述设置过程中,还可以根据反向引用的引用值大小对其顺序编号,再将所述编号作为发生反向引用的确定性有限状态机DFA状态节点上的引用标识。
举例来说,以A(BC|DE)(A+B)([a-c])F\1G\3这个正则表达式为例,\1表示在这个位置需要反向引用(BC|DE)中的内容,\3表示在这个位置需要反向引用([a-c])中的内容;然后将引用值1和3重新顺序编码得到引用标识分别为1和2;而(A+B)不会被引用,故不需要进行位置标识。之所以需要进行这样处理,是因为假设一个正则表达式中包含有100个括号部分,而只需要对第1个括号和第100个括号进行反向引用,如果不对反向引用的括号部分进行重新标识,那么我们需要设置100个缓存和原来的每个括号进行对应,而经过重新顺序编码后,我们就只需要设置2个缓存,这样就可以大大节省所需要的资源。
在经过上述的设置操作之后,就可以进行如下的匹配操作。
步骤12:根据所设置的位置标识和引用标识,将当前输入字符和反向引用部分的内容进行匹配操作。
在该步骤中,在经过上述步骤11的设置后,就可以根据所设置的位置标识和引用标识,将当前输入字符和反向引用部分的内容进行匹配操作。具体来说,如果当前状态节点或状态节点转移边上的位置标识有效,则将当前输入的字符存储到所述位置标识对应的引用缓存中;如果当前状态节点上的引用标识有效,则将当前输入的字符和所述引用标识对应的引用缓存中保存的字符进行比较,判断该当前输入的字符是否匹配。
上述位置标识有效可以根据实际需要来进行定义,例如当位置标识不为0时,可以定义该位置标识有效,当位置标识为0时,则定义为无效;同样的,当引用标识不为0时,也可以定义该引用标识有效,当引用标识为0时,则定义为无效。
为了更好的描述匹配过程,下面以具体的实例来进行说明,例如以正则表达式A(BC|DE)(A+B)([a-c])F\1G\3所对应的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((B|[a-c])D(EF))G\1H\3所对应的DFA状态机为例,如图3所示为所举的第二实例中DFA状态机对输入字符串的匹配过程示意图,图中:在字符A后面紧跟的左括号和EF前的左括号分别标识为1和2,表示(B|[a-c])D(EF))中出现的字符需要记录到缓存1中,而(EF)中出现的字符不仅要记录到缓存1中,还需要记录到缓存2中。在对反向引用部分进行匹配时,在状态节点8上,就将当前输入的字符BDEF和缓存1中存储的内容进行匹配;在状态节点9上,就将当前输入的字符EF和缓存2中存储的内容进行匹配。
再考虑另一个在状态节点转移边上设置位置标识的例子,如图4所示为所举的第三实例中DFA状态机对输入字符串的匹配过程示意图,图中正则表达式为A(B|(CD))E\1F\2,左边的示意图是在状态节点上增加位置标识而生成的DFA,假如输入的字符串为”ABEBFB”,按照左边的DFA,是能够匹配的;但是第4个字符B虽然能够匹配\1所引用的(B|(CD)),但第6个字符B却无法匹配\2所引用的(CD),因此是错误的。造成错误的原因是在状态节点上标记多个位置标识时,无法区分下一个输入字符应该存放到哪个缓存中。
而在上述图4右边的示意图中,可以将位置标识设置在状态节点的转移边上,这样就可以明确转移边上的字符应该存放到哪个缓存中,此时输入字符“ABEBFB”无法匹配,但是输入字符“ACDECDFCD”是可以匹配的。
另外,当同一状态上存在多个反向引用时,还可以在所述状态节点上设置多个引用标识所发生的顺序。举例来说,以正则表达式A(BC|DE)(A+B)([a-c])F\3\1所对应的匹配过程为例,在输入字符F后跳转到的状态上需要连续发生两次反向引用操作,第1次需要引用([a-c]),第2次需要引用(BC|DE)。那么此时除了需要在状态上标记两个引用标识之外,还需要记录下两个引用标识所发生的顺序,具体可以采用如下的方式来进行:
例如,可以在状态节点上按照反向引用出现的先后顺序,依次为所述反向引用分配由小到大的引用标识,并设定数值小的引用标识优先进行处理。如图5所示为所举的第四实例中DFA状态机对输入字符串的匹配过程示意图,图5中:所对应的正则表达式为A(BC|DE)(A+B)([a-c])F\3\1;在生成DFA时,为出现在前面的反向引用分配较小的引用标识,并规定编号较小的引用缓存优先访问。即为“\3”分配引用标识\1,为“\1”分配引用标识\2;在反向引用匹配时,引用标识为\1的优先处理,即在状态节点8优先将所输入的字符“c”和缓存1中保存的字符进行比较,然后再对引用标识为\2的部分进行处理,即将所输入的字符“DE”和缓存2中保存的字符进行比较。
除上述设置方式外,还可以在状态节点上按照反向引用的引用值大小,依次为所述反向引用分配由小到大的引用标识,并在所分配的引用标识上记录各反向引用发生的先后顺序。
举例来说,如图6所示为所举的第五实例中DFA状态机对输入字符串的匹配过程示意图,图中:所对应的正则表达式为A(BC|DE)(A+B)([a-c])F\3\1;在生成DFA时,除了为反向引用分配引用标识外,在出现多个反向引用的状态上记录各反向引用所发生的先后顺序,即在图6中的状态节点8上同时记录下反向引用标识和发生的先后顺序。在状态节点8上进行反向引用匹配时,首先对先发生的引用标识为\2的进行处理,即将当前输入的字符“c”和缓存2中保存的字符进行比较;然后再对后发生的引用标识为\1的进行处理,即将当前输入的字符“DE”和缓存1中保存的字符进行比较。
值得注意的是,上述过程是为了说明同一个状态上有多个反向引用的情况,在上述所举出的例子中,位置标识可以标注在状态节点,也可以标注在状态节点的转移边上,具体可以根据实际的规则情况来进行处理,但这并不影响本发明的实质内容。
综上所述,通过以上方法实施例1的技术方案,就可以使DFA匹配系统支持反向引用,同时对现有的存储结构和引擎架构的改动都较小,从而提高了DFA匹配系统的规则处理能力,具有很高的实用价值。
另外,在本实施例1的步骤12中,将当前输入的字符存储到所述位置标识对应的引用缓存中,具体可以有如下的存储方式:
方式1:将当前输入的字符本身直接保存到所述位置标识对应的引用缓存中;
方式2:将当前输入字符的存储位置保存到所述位置标识对应的引用缓存中;
方式3:将需要引用的当前输入字符串的起始字符和结束字符的存储位置对保存到所述位置标识对应的引用缓存中;
方式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匹配系统的规则处理能力,具有很高的实用价值。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (12)
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的状态节点或状态节点的转移边上设置位置标识,并在状态节点上设置引用标识;
引用缓存单元,用于在当前状态节点或状态节点转移边上的位置标识有效时,将当前输入的字符存储到所述位置标识对应的引用缓存中;
反向引用匹配单元,用于在当前状态节点上的引用标识有效时,将当前输入的字符和所述引用标识对应的引用缓存单元中所保存的字符进行比较,判断该当前输入的字符是否匹配。
10、如权利要求9所述的装置,其特征在于,所述DFA状态信息设置单元包括:
引用标识设置模块,用于找出正则表达式中的每个反向引用,并将所述反向引用的引用值作为发生反向引用的DFA状态节点上的引用标识;
位置标识设置模块,用于找出所述每个反向引用所包括的内容,将所述引用标识作为所包括内容在DFA中的前一个状态节点或前一个状态节点的转移边上的位置标识。
11、如权利要求9所述的装置,其特征在于,所述DFA状态信息设置单元中还包括:
顺序设置模块,用于当同一状态上存在多个反向引用时,在所述状态节点上设置多个引用标识所发生的顺序。
12、如权利要求9-11其中之一所述的装置,其特征在于,所述装置还包括:
输入字符串缓存单元,用于保存需要进行匹配的输入字符串,并将其传送给所述反向引用匹配单元和所述引用缓存单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100883244A CN101599074A (zh) | 2009-06-26 | 2009-06-26 | 正则表达式匹配的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100883244A CN101599074A (zh) | 2009-06-26 | 2009-06-26 | 正则表达式匹配的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101599074A true CN101599074A (zh) | 2009-12-09 |
Family
ID=41420522
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100883244A Pending CN101599074A (zh) | 2009-06-26 | 2009-06-26 | 正则表达式匹配的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101599074A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101944121A (zh) * | 2010-09-20 | 2011-01-12 | 北京星网锐捷网络技术有限公司 | 有限状态自动机生成方法、关键字匹配方法及装置和设备 |
CN102207979A (zh) * | 2011-06-30 | 2011-10-05 | 北京新媒传信科技有限公司 | 一种敏感词匹配方法和系统 |
CN103002061A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种长域名与短域名互相转化的方法及装置 |
CN103294734A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103294735A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103312627A (zh) * | 2013-05-30 | 2013-09-18 | 中国人民解放军国防科学技术大学 | 基于两级存储的正则表达式匹配方法 |
US8756170B2 (en) | 2010-05-25 | 2014-06-17 | Huawei Technologies Co., Ltd. | Regular expression matching method and system |
CN104750725A (zh) * | 2013-12-30 | 2015-07-01 | 亿阳信通股份有限公司 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
CN106294824A (zh) * | 2016-08-17 | 2017-01-04 | 广东工业大学 | 制造物联网面向不确定数据流的复杂事件检测方法及系统 |
CN111078963A (zh) * | 2019-12-31 | 2020-04-28 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
WO2020107359A1 (zh) * | 2018-11-30 | 2020-06-04 | 唐山曹妃甸联城科技有限公司 | 一种规则匹配方法及装置 |
CN111258960A (zh) * | 2020-01-09 | 2020-06-09 | 奇安信科技集团股份有限公司 | Nfa状态关系式的构建方法、字符串处理方法及装置 |
-
2009
- 2009-06-26 CN CNA2009100883244A patent/CN101599074A/zh active Pending
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8756170B2 (en) | 2010-05-25 | 2014-06-17 | Huawei Technologies Co., Ltd. | Regular expression matching method and system |
CN101944121B (zh) * | 2010-09-20 | 2012-05-30 | 北京星网锐捷网络技术有限公司 | 有限状态自动机生成方法、关键字匹配方法及装置和设备 |
CN101944121A (zh) * | 2010-09-20 | 2011-01-12 | 北京星网锐捷网络技术有限公司 | 有限状态自动机生成方法、关键字匹配方法及装置和设备 |
CN102207979A (zh) * | 2011-06-30 | 2011-10-05 | 北京新媒传信科技有限公司 | 一种敏感词匹配方法和系统 |
CN103002061A (zh) * | 2011-09-16 | 2013-03-27 | 阿里巴巴集团控股有限公司 | 一种长域名与短域名互相转化的方法及装置 |
CN103002061B (zh) * | 2011-09-16 | 2015-06-24 | 阿里巴巴集团控股有限公司 | 一种长域名与短域名互相转化的方法及装置 |
CN103294734B (zh) * | 2012-02-28 | 2016-11-16 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103294734A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103294735A (zh) * | 2012-02-28 | 2013-09-11 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103294735B (zh) * | 2012-02-28 | 2016-08-03 | 中国科学技术大学 | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
CN103312627A (zh) * | 2013-05-30 | 2013-09-18 | 中国人民解放军国防科学技术大学 | 基于两级存储的正则表达式匹配方法 |
CN103312627B (zh) * | 2013-05-30 | 2015-06-10 | 中国人民解放军国防科学技术大学 | 基于两级存储的正则表达式匹配方法 |
CN104750725A (zh) * | 2013-12-30 | 2015-07-01 | 亿阳信通股份有限公司 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
CN104750725B (zh) * | 2013-12-30 | 2019-10-18 | 天津亿阳信通科技有限公司 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
CN106294824A (zh) * | 2016-08-17 | 2017-01-04 | 广东工业大学 | 制造物联网面向不确定数据流的复杂事件检测方法及系统 |
CN106294824B (zh) * | 2016-08-17 | 2019-06-11 | 广东工业大学 | 制造物联网面向不确定数据流的复杂事件检测方法及系统 |
WO2020107359A1 (zh) * | 2018-11-30 | 2020-06-04 | 唐山曹妃甸联城科技有限公司 | 一种规则匹配方法及装置 |
CN111078963A (zh) * | 2019-12-31 | 2020-04-28 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
CN111078963B (zh) * | 2019-12-31 | 2023-08-15 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
CN111258960A (zh) * | 2020-01-09 | 2020-06-09 | 奇安信科技集团股份有限公司 | Nfa状态关系式的构建方法、字符串处理方法及装置 |
CN111258960B (zh) * | 2020-01-09 | 2023-07-28 | 奇安信科技集团股份有限公司 | Nfa状态关系式的构建方法、字符串处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101599074A (zh) | 正则表达式匹配的方法及装置 | |
Fraigniaud et al. | Collective tree exploration | |
CN102968339B (zh) | 基于云计算架构实现复杂事件处理的系统及其方法 | |
CN104657140A (zh) | 代码生成方法及装置 | |
Ribeiro et al. | A branch-price-and-cut algorithm for the workover rig routing problem | |
CN103324592A (zh) | 一种数据迁移控制方法、数据迁移方法及装置 | |
CN103942083B (zh) | 一种面向可变参函数的编译实现方法 | |
CN105117430A (zh) | 一种基于等价类的重复任务过程发现方法 | |
US20050288916A1 (en) | Determining event causality including employment of partitioned event space | |
CN105404635A (zh) | 字符串匹配的方法、设备和异构计算系统 | |
CN105530153A (zh) | 网络内的从设备通信方法、通信网络、主设备及从设备 | |
CN103473106B (zh) | 一种页面生成的方法及系统 | |
CN106341497A (zh) | 数字id生成方法及装置 | |
CN104854602A (zh) | 根据突触前神经元的激发生成消息 | |
CN111158919B (zh) | 内存资源原地共享决策系统及其方法 | |
Pu et al. | Syntactic rule based approach toweb service composition | |
CN103092745B (zh) | 系统日志记录的控制方法和装置 | |
US20070032986A1 (en) | Efficient filtered causal graph edge detection in a causal wavefront environment | |
CN104572655A (zh) | 数据处理的方法、装置及系统 | |
CN113192153B (zh) | 基于子地图的多智能体协同地图构建方法和装置 | |
CN104700055A (zh) | 一种多概率rfid事件流上复杂事件检测方法 | |
Matsumoto et al. | Learning pattern languages using queries | |
CN111797497B (zh) | 一种用于电磁暂态并行仿真的通讯方法及系统 | |
Qian | Research on RFID anticollision algorithms in industrial internet of things | |
Ghamarian et al. | Incremental pattern matching in graph-based state space exploration |
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 |
Open date: 20091209 |