首页> 中国专利> 基于正则表达式的字符串匹配方法和装置

基于正则表达式的字符串匹配方法和装置

摘要

本发明公开了一种基于正则表达式的字符串匹配方法,包括:步骤100、根据字符串格式判断匹配字符串的匹配类型为段模式还是行模式,设置匹配类型标识;步骤200、根据匹配类型标识将匹配字符串按段分割或按行分割为多个子字符串,对每个子字符串确定正则表达式生成模式,并根据正则表达式生成模式以不同的连接正则表达式连接词组生成子字符串正则表达式,获得包含至少一个子字符串正则表达式的正则表达式列表;步骤300、根据匹配类型标识对待匹配数据进行按段分割或按行分割获得待匹配子字符串,按子字符串正则表达式逐一地对分割得到的待匹配子字符串进行匹配,输出匹配结果。

著录项

  • 公开/公告号CN102609459A

    专利类型发明专利

  • 公开/公告日2012-07-25

    原文格式PDF

  • 申请/专利权人 神州数码网络(北京)有限公司;

    申请/专利号CN201210009272.9

  • 发明设计人 刘磊;

    申请日2012-01-12

  • 分类号G06F17/30(20060101);

  • 代理机构11332 北京品源专利代理有限公司;

  • 代理人李虹青

  • 地址 100085 北京市海淀区上地九街9号数码科技广场一段三层A区

  • 入库时间 2023-12-18 06:17:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-06

    授权

    授权

  • 2013-08-21

    著录事项变更 IPC(主分类):G06F17/30 变更前: 变更后: 申请日:20120112

    著录事项变更

  • 2013-06-05

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20120112

    实质审查的生效

  • 2012-07-25

    公开

    公开

说明书

技术领域

本发明涉及数据处理领域,特别涉及基于正则表达式的字符串匹配方法和 装置。

背景技术

正则表达式是一种正规的描述字符串模式的方法,可以用来进行文本匹配, 具体为在给定的字符串中寻找与给定的正则表达式相匹配的部分。正则表达式 由普通字符和元字符组成,普通字符包括数字和大小写的字母,而元字符是具 有特殊的含义的字符,例如,“\s”表示任何空白字符,包括空格、制表符、换 页符等,“.”表示除换行元字符“\n”以外的任意字符,“*”表示前面的子表 达式重复零次或多次。正则表达式可以用来进行文本匹配,具体为在给定的字 符串中寻找和匹配正则表达式相匹配的部分。正则表达式广泛应用在通信行业 中,用于对数据流量进行模式匹配检查,例如进行协议解析、病毒检测和业务 分类等。

在实际应用中,在进行文本匹配时,需要根据不同的匹配内容编写不同的 字符串匹配结构,设计过程较为繁琐,而匹配内容的格式一旦改变,就需要重 新设计字符串匹配结构,造成维护困难。

由此,需要自动根据正则表达式设计进行字符串匹配的方法和装置

发明内容

本发明的目的在于提供易于维护基于正则表达式的字符串匹配方法和装 置。

本发明公开了一种基于正则表达式的字符串匹配方法,包括:

步骤100、解析匹配字符串,根据预先设定的段模式分隔符以及字符串格式 判断匹配字符串的匹配类型为段模式还是行模式,根据判断得到的匹配类型设 置匹配类型标识;

步骤200、根据匹配类型标识将匹配字符串按段分割或按行分割为多个子字 符串,对每个子字符串确定正则表达式生成模式,并根据正则表达式生成模式 以不同的连接式连接所述子字符串中以预定词组标记标识的词组生成子字符串 正则表达式,获得包含至少一个子字符串正则表达式的正则表达式列表;

步骤300、根据匹配类型标识对待匹配数据进行按段分割或按行分割获得待 匹配子字符串,按子字符串正则表达式逐一地对分割得到的待匹配子字符串进 行匹配,输出匹配结果。

优选地,匹配类型为段模式是指所述匹配字符串的格式以所述预定的段模 式分隔符为界进行重复,匹配类型为行模式是指所述匹配字符串格式为不符合 段模式的其它模式。

优选地,所述按段分割是以预定段模式分隔符为界截取子字符串,所述按 行分割是以换行符为界截取子字符串。

优选地,所述正则表达式生成模式包括列模式和非列模式,对于列模式, 利用代表至少一个空白字符的连接正则表达式连接词组生成子字符串正则表达 式,对于非列模式,利用代表至少一个非换行符的任意字符的连接则正表达式 生成子字符串正则表达式。

优选地,所述步骤100包括:

步骤101、解析所述匹配字符串;

步骤102、判断所述匹配字符串的格式是否以预定的段模式分隔符为界进行 重复,如果是,所述匹配字符串匹配类型为段模式,执行步骤103,如果否,所 述匹配字符串匹配类型为行模式,执行步骤104;

步骤103、设置所述匹配字符串的匹配类型标识为段模式,结束步骤100流 程;

步骤104、设置所述匹配字符串的匹配类型标识为行模式,结束100流程。

优选地,所述步骤200包括:

步骤201、判断所述匹配字符串的匹配类型标识为段模式还是行模式,如果 为段模式,则执行步骤202,如果为行模式则执行步骤203;

步骤202、按段模式分隔符将所述匹配字符串分割为多个匹配子字符串,执 行步骤204;

步骤203、按换行符将所述匹配字符串分割为多个子字符串,执行步骤204;

步骤204、取出一个未处理的匹配子字符串,根据预定的词组标记提取其中 的由词组标记标识的词组和词组间字符;

步骤205、根据词组间字符判断所述匹配子字符串的正则表达式生成模式为 列模式还是非列模式,如果是列模式,则执行步骤206,如果是非列模式,则执 行步骤207;

步骤206、将在步骤204中提取的词组用表示至少一个空白字符的连接正则 表达式连接为子字符串正则表达式,执行步骤208;

步骤207、将在步骤204中提取的词组用表示至少一个非换行符的任意字符 的连接正则表达式连接为子字符串正则表达式,执行步骤208;

步骤208、将得到的子字符串正则表达式加入正则表达式列表;

步骤209、判断是否还有未处理的匹配子字符串,如果有,则执行步骤204, 如果没有,则执行步骤210;

步骤210、结束正则表达式生成。

优选地,所述步骤300包括:

步骤301、判断所述匹配类型标识为段模式还是行模式,如果为段模式,则 执行步骤302,如果为行模式则执行步骤303;

步骤302、将待匹配数据按段分割为待匹配子字符串,执行步骤304;

步骤303、将待匹配数据按行分割为待匹配子字符串,执行步骤304;

步骤304、按顺序从所述正则表达式列表中读取一个未处理的子字符串正则 表达式;

步骤305、用子字符串正则表达式与待匹配子字符串进行匹配;

步骤306、判断子字符串匹配是否成功,如果失败执行步骤307,如果成功 执行步骤308;

步骤307、输出字符串匹配失败,结束匹配流程;

步骤308、判断是否还有未处理的子字符串正则表达式,如果有,则执行步 骤304,如果没有,则执行步骤309;

步骤309、输出字符串匹配成功,结束匹配流程。

本发明还公开了一种基于正则表达式的字符串匹配装置,包括:

解析模块,用于解析匹配字符串,根据预先设定的段模式分隔符以及字符 串格式判断匹配字符串的匹配类型为段模式还是行模式,根据判断得到的匹配 类型设置匹配类型标识;

正则表达式生成模块,用于根据匹配类型标识将匹配字符串按段分割或按 行分割为多个子字符串,对每个子字符串确定正则表达式生成模式,并根据正 则表达式生成模式以不同的连接式连接所述子字符串中以预定词组标记标识的 词组生成子字符串正则表达式,获得包含至少一个子字符串正则表达式的正则 表达式列表;

数据匹配模块,用于根据匹配类型标识对待匹配数据进行按段分割或按行 分割获得待匹配子字符串,按子字符串正则表达式逐一地对分割得到的待匹配 子字符串进行匹配,输出匹配结果。

本发明通过不同匹配模式来覆盖所有的字符串匹配形式,通过设置正则表 达式生成模式从而简化了字符串匹配结构体的设计过程。使匹配高效,设计简 单,维护方便。

附图说明

图1是本发明的基于正则表达式的字符串匹配方法的流程图;

图2是本发明的基于正则表达式的字符串匹配方法的解析子过程的流程图;

图3是本发明的基于正则表达式的字符串匹配方法的正则表达式生成子过 程的流程图;

图4是本发明的基于正则表达式的字符串匹配方法的数据匹配子过程的流 程图;

图5是本发明的基于正则表达式的字符串匹配装置的框图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。

本发明实施例根据匹配字符串的排列方式特点,对匹配字符串类型进行分 配,根据不同类型进行不同的正则表达式生成和字符串匹配操作,从而实现简 化字符串匹配结构的设计过程的目的。

其中,本发明实施例根据匹配字符串的分隔特点,将匹配字符串的匹配模 式分为行模式和段模式。其中,匹配模式为段模式的匹配字符串中被匹配内容 是按照某种固定格式重复出现的,即在整个字符串中字符组合以相同格式重复 出现(以特定字符/字符串分隔重复,例如,字符串“123**234**789**”中, 内容以“**”为分隔符每三个字符重复出现)。不具备段模式特点的字符串(即 字符串内容不按照特定格式重复)被分类为行模式的字符串。在一个优选实施 例中,匹配模式为行模式的字符串可以根据是否存在换行符进一步分为单行模 式和多行模式,单行模式的匹配字符串在匹配字符串内没有换行符,匹配字符 串只在同一行中出现,而多行模式的匹配字符串内存在至少一个换行符,匹配 字符串在多行中出现。本发明按照不同的模式来对匹配字符串进行分割和匹配。

同时,本发明实施例在根据匹配字符串生成正则表达式时,还根据字符串 中词组的特点,将匹配字符串分为列模式和非列模式。此处所述的词组是字符 串中利用词组标记标示的字符组合,例如字符串“$catch$ $it$”,利用“$” 作为词组标记标示了两个词组“catch”和“it”,通过这种方式可以在解析时 识别字符串中的哪些字符组合是词组。在列模式中,匹配字符串的词组之间仅 使用至少一个空白字符(包括空格、制表符等)连接,即匹配字符串的词组在 逻辑上是紧密相连的,在相邻词组之间不存在其他字符,例如上述的“$catch$ $it$”就是列模式的字符串。而在非列模式中,匹配字符串的词组之间包括除 空白字符外的其它字符,例如“$catched$,$it$”。

图1示出了本发明的基于正则表达式的字符串匹配方法的流程图。其具体 流程如下:

步骤100、解析匹配字符串,根据预先设定的段模式分隔符以及字符串格式 判断匹配字符串的匹配类型为段模式还是行模式,根据判断得到的匹配类型为 匹配字符串设置代表其匹配类型的标识,即匹配类型标识。

步骤200、按匹配类型标识将匹配字符串划分为多个子字符串组成的字符串 列表,对每个子字符串确定正则表达式生成模式,并根据正则表达式生成模生 成子字符串匹配正则表达式。其中,对于段模式的匹配字符串,将该匹配字符 串按分隔符进行分割,对于行模式的匹配字符串,将该匹配字符串按换行符进 行分割。分割后,对于每一个子字符串,按预先设定的词组标记解析该子字符 串,获得子字符串中的词组以及词组之间的字符,根据所述词组之间的字符判 断该子字符串的正则表达式生成类型是列模式还是非列模式,对于列模式的子 字符串,在提取得到的词组之间用“\s*”元符号连接形成子字符串正则表达式, 对于非列模式的子字符串,在提取得到的词组之间用“.*?”元符号连接形成 子字符串正则表达式,最后将各子字符串正则表达式合并为子字符串正则表达 式列表,并将所属匹配类型标识设置到所述正则表达式列表。

步骤300、进行数据匹配,获取正则表达式列表的匹配类型标识,根据匹配 类型对待匹配数据进行划分,即,如果用于进行匹配的正则表达式列表为段模 式,则按预定分隔符对待匹配数据进行分割(分隔符之间的部分或字符串开始/ 结束与分隔符之间的部分划分为一个子字符串)如果用于进行匹配的正则表达 式列表为行模式,则按换行符对待匹配数据进行分割(换行符之间或字符串开 始/结束与换行符之间的部分划分为一个子字符串)。分割后,按子字符串正则 表达式逐一地对分隔得到的待匹配子字符串进行匹配。

图2是进一步说明所述步骤100的具体流程的方法流程图。如图2所示, 所述步骤100包括:

步骤101、解析所述匹配字符串;

步骤102、判断所述匹配字符串的格式是否以预定的段模式分隔符为界进行 重复,如果是,所述匹配字符串匹配类型为段模式,执行步骤103,如果否,所 述匹配字符串匹配类型为行模式,执行步骤104;

步骤103、设置所述匹配字符串的匹配类型标识为段模式,结束;

步骤104、设置所述匹配字符串的匹配类型标识为行模式,结束。

图3是进一步说明所述步骤200的具体流程的方法流程图。如图3所示, 所述步骤200包括:

步骤201、判断所述匹配字符串的匹配类型标识为段模式还是行模式,如果 为段模式,则执行步骤202,如果为行模式则执行步骤203;

步骤202、按段模式分隔符将所述匹配字符串分割为多个匹配子字符串,即 将以段模式分隔符为界重复的部分提取为子字符串,执行步骤204;

步骤203、按换行符将所述匹配字符串分割为多个子字符串,即将字符串中 的每一行提取为子字符串,执行步骤204;

步骤204、取出一个匹配子字符串,根据预定的词组标记提取其中的由词组 标记标识的词组和词组间字符;

步骤205、根据词组间字符判断所述匹配子字符串的正则表达式生成模式为 列模式还是非列模式,如果是列模式,则执行步骤206,如果是非列模式,则执 行步骤207;

步骤206、将在步骤204中提取的词组用表示至少一个空白字符的正则表达 式“\s*”连接为子字符串正则表达式,执行步骤208;

步骤207、将在步骤204中提取的词组用表示至少一个非换行符的任意字符 的正则表达式“.*?”连接为子字符串正则表达式,执行步骤208;

步骤208、将得到的子字符串正则表达式加入正则表达式列表;

步骤209、判断是否还有未处理的匹配子字符串,如果有,则执行步骤204, 如果没有,则执行步骤210;

步骤210、结束正则表达式生成。

图4是进一步说明所述步骤300基于正则表达式进行字符串匹配的具体流 程的方法流程图。如图4所示,所述步骤300包括:

步骤301、判断所述正则表达式列表的匹配类型标识为段模式还是行模式, 如果为段模式,则执行步骤302,如果为行模式则执行步骤303;

步骤302、将待匹配数据按段分割为待匹配子字符串,执行步骤304;

步骤303、将待匹配数据按行分割为待匹配子字符串,执行步骤304;

步骤304、按顺序从所述正则表达式列表中读取一个未处理的子字符串正则 表达式;

步骤305、用子字符串正则表达式与待匹配子字符串进行匹配;

步骤306、判断子字符串匹配是否成功,如果失败执行步骤307,如果成功 执行步骤308;

步骤307、输出字符串匹配失败,结束匹配流程;

步骤308、判断是否还有未处理的子字符串正则表达式,如果有,则执行步 骤304,如果没有,则执行步骤309;

步骤309、输出字符串匹配成功,结束匹配流程。

本发明通过不同匹配模式来覆盖所有的字符串匹配形式,通过设置正则表 达式生成模式从而简化了字符串匹配结构体的设计过程。使匹配高效,设计简 单,维护方便。

在本发明的另一个优选实施例中,可以对行模式进行进一步细分,将行模 式分为单行模式和多行模式单行模式的匹配字符串在匹配字符串内没有换行 符,匹配字符串只在同一行中出现,而多行模式的匹配字符串内存在至少一个 换行符,匹配字符串在多行中出现。也就是说,将匹配类型分为三种类型,即 段模式、单行模式和多行模式。在步骤200中分割所述匹配字符串时,对于单 行模式的字符串不必进行分割,而对于多行模式的字符串按行进行分割获得多 个匹配子字符串。在步骤300中对待匹配数据进行分割时,如果匹配正则表达 式的匹配模式为单行模式,则对于待匹配数据不进行分割,如果匹配模式为多 行模式,则将待匹配数据按行进行分割。

在本发明的又一个优选实施例中,在步骤305进行匹配时,逐字符进行匹 配,直到整个子字符串匹配完成。

图5是本发明的另一优选实施例的基于正则表达式的字符串匹配装置,所 述装置包括:

解析模块,用于解析匹配字符串,根据预先设定的段模式分隔符以及字符 串格式判断匹配字符串的匹配类型为段模式还是行模式,根据判断得到的匹配 类型为匹配字符串设置代表其匹配类型的标识,即匹配类型标识。

正则表达式生成模块,用于按匹配类型标识将匹配字符串划分为多个子字 符串组成的字符串列表,对每个子字符串确定正则表达式生成模式,并根据正 则表达式生成模生成子字符串匹配正则表达式。其中,对于段模式的匹配字符 串,将该匹配字符串按分隔符进行分割,对于行模式的匹配字符串,将该匹配 字符串按换行符进行分割。分割后,对于每一个子字符串,按预先设定的词组 标记解析该子字符串,获得子字符串中的词组以及词组之间的字符,根据所述 词组之间的字符判断该子字符串的正则表达式生成类型是列模式还是非列模 式,对于列模式的子字符串,在提取得到的词组之间用“\s*”元符号连接形成 子字符串正则表达式,对于非列模式的子字符串,在提取得到的词组之间用 “.*?”元符号连接形成子字符串正则表达式,最后将各子字符串正则表达式 合并为子字符串正则表达式列表,并将所属匹配类型标识设置到所述正则表达 式列表。

数据匹配模块,用于进行数据匹配,获取正则表达式列表的匹配类型标识, 根据匹配类型对待匹配数据进行划分,即,如果用于进行匹配的正则表达式列 表为段模式,则按预定分隔符对待匹配数据进行分割(分隔符之间的部分或字 符串开始/结束与分隔符之间的部分划分为一个子字符串)如果用于进行匹配的 正则表达式列表为行模式,则按换行符对待匹配数据进行分割(换行符之间或 字符串开始/结束与换行符之间的部分划分为一个子字符串)。分割后,按子字 符串正则表达式逐一地对分割得到的待匹配子字符串进行匹配。

上述仅为本发明的较佳实施例及所运用技术原理,任何熟悉本技术领域的 技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在 本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号