[发明专利]正则表达式匹配的方法及装置无效
申请号: | 200910088324.4 | 申请日: | 2009-06-26 |
公开(公告)号: | CN101599074A | 公开(公告)日: | 2009-12-09 |
发明(设计)人: | 王浩;胡新宇;陈建 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京凯特来知识产权代理有限公司 | 代理人: | 郑立明 |
地址: | 518129广东省*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 正则 表达式 匹配 方法 装置 | ||
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所述的方法,其特征在于,在所述判断该当前输入的字符是否匹配的过程中,所述方法还包括:
在判断该当前输入的字符匹配成功后,再对所输入的下一个字符进行操作;或,
跳过进行匹配判断的该当前输入的字符,对所输入的下一个字符进行操作,再根据该当前输入的字符的匹配结果来决定是否继续进行后继的匹配操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910088324.4/1.html,转载请声明来源钻瓜专利网。