[发明专利]正则表达式匹配的方法及装置无效
申请号: | 200910088324.4 | 申请日: | 2009-06-26 |
公开(公告)号: | CN101599074A | 公开(公告)日: | 2009-12-09 |
发明(设计)人: | 王浩;胡新宇;陈建 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京凯特来知识产权代理有限公司 | 代理人: | 郑立明 |
地址: | 518129广东省*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 正则 表达式 匹配 方法 装置 | ||
技术领域
本发明涉及网络通信领域,尤其涉及一种正则表达式匹配的方法及装置。
背景技术
目前,越来越多的系统采用正则表达式取代字符串来描述特征,所说的正则表达式是一种形式语言,由常量和算子组成,常量和算子分别指示元字符的集合和在这些集合上的运算。和字符串相比,正则表达式能够非常灵活、简单、有效地描述各种特征,使得特征具有动态特性,适合各种动态搜索。例如: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匹配系统的规则处理能力,具有很高的实用价值。
本发明实施例提供了一种正则表达式匹配的方法,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910088324.4/2.html,转载请声明来源钻瓜专利网。