[发明专利]基于原语状态机的高速字符串特征匹配方法、装置及设备有效
申请号: | 202110801808.X | 申请日: | 2021-07-15 |
公开(公告)号: | CN113505585B | 公开(公告)日: | 2023-03-21 |
发明(设计)人: | 刘铮铮;周蓉蓉;姜武忠;莫晨宇;王瑞旋;陈妍红 | 申请(专利权)人: | 中南大学湘雅医院 |
主分类号: | G06F40/253 | 分类号: | G06F40/253;G06F40/284 |
代理公司: | 长沙轩荣专利代理有限公司 43235 | 代理人: | 李喆 |
地址: | 410008*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 状态机 高速 字符串 特征 匹配 方法 装置 设备 | ||
1.一种基于原语状态机的高速字符串特征匹配方法,其特征在于,具体包括:
用户输入关键字特征集合,并对每个关键字特征以特征序号和用于存储关键字的字符串序列方式存储所述关键字特征;
基于预先定义的基本操作原语,对所述关键字特征集合,按照预设的关键字特征集合编译方法进行编译,获得关键字特征集合对应的原语状态机;
所述基本操作原语包括:
跳过字符原语:在当前输入字符读取位置,向前或向后跳过N个字符;
在当前位置匹配多个字符串原语:在当前输入字符位置开始匹配多个字符串特征;
搜索匹配多个字符串原语:从当前输入字符位置开始搜索匹配多个字符串特征;
跳转到指定匹配位置原语:将当前读取位置指向输入字符串的指定位置;
成功命中原语:匹配过程结束,返回匹配命中的关键字特征序号和命中的结束位置;
失败原语:匹配过程结束,返回失败信息;
所述预设的关键字特征集合编译方法具体包括:
创建成功命中原语节点、失败原语节点作为基础原语节点,并初始化相关变量,将失败指针指向失败原语节点,当前节点指针指向空节点;
获取待编译关键字特征集合,读取当前字符并将读取指针后移,根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译构造原语状态机;获得每个关键字对应的原语状态机;
根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机;
获取待匹配目标字符串,基于所述原语状态机执行字符串匹配过程,获得命中关键字,并输出命中关键字的特征序号和当前匹配字符的结束位置。
2.根据权利要求1所述的基于原语状态机的高速字符串特征匹配方法,其特征在于,所述根据所述当前字符和/或下一个字符的类型进行语法分析,并按照预设的编译方法对不同字符或字符组合进行编译步骤具体包括:
当前字符为“.”,读取下一个字符,当下一个字符为“*”,设置浮动标志并读取指针后移,否则建立跳过字符原语节点作为当前节点或将当前跳过字符原语的跳过数量加1;
当前字符为“*”,停止编译并报错;
对其它字符,进行“字符串”原语节点的处理过程,具体包括:
当前字符为“\”,读取下一个字符,并将读取指针后移;
当前节点不为“字符串”类型的原语节点,根据浮动标志是否为True,创建“搜索匹配多个字符串”原语节点或“当前位置匹配多个字符串”原语节点,并将当前节点的成功跳转状态指向新节点,失败跳转状态指向失败指针,最后更新当前节点为新创建的原语节点;将当前字符加入到当前原语的搜索字符串尾;
如果浮动标志为True,且失败指针指向失败原语节点,创建跳转指定位置原语,将其成功和失败跳转状态指向当前节点,字符读取位置指定为前一状态的初始读取位置,并将失败指针指向新创建的跳转指定位置原语;
设置浮动标志为False。
3.根据权利要求2所述的基于原语状态机的高速字符串特征匹配方法,其特征在于,所述根据所述关键字对应的原语状态机根节点的深度,先合并深度相同的原语状态机,再按照从浅到深的原则进行聚合,获得关键字特征集合对应的原语状态机步骤具体包括:
创建按照深度排序的空链表,根据原语状态机深度规则确定各原语状态机的深度值;
读取所述关键字对应的第一个原语状态机及其深度值,将所述第一个原语状态机和对应的深度值保存至空链表中,获得深度链表;
继续读取所述关键字对应的原语状态机以及对应的深度值,并在深度链表中查找相同深度的原语状态机,作为目标状态机;
当目标状态机存在时,根据目标状态机当前的状态机类型和原语节点类型进行状态机合并处理;当目标状态机不存在时,则将当前读取的状态机按照深度排序插入至深度链表中,直到所有原语状态机读取结束获得最终深度链表;
从所述最终深度链表中取首个原语状态机,并将全局根指向首个原语状态机节点,且对于除首个原语状态机外的原语状态机创建跳转到指定匹配位置原语节点,替换前一个状态机的失败原语节点,并将成功失败跳转指针指向下一个原语状态机的根节点;
删除深度链表,并返回全局根指针获得关键字特征集合对应的原语状态机。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中南大学湘雅医院,未经中南大学湘雅医院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110801808.X/1.html,转载请声明来源钻瓜专利网。