数据的匹配方法及装置与流程

文档序号:11154965阅读:405来源:国知局
数据的匹配方法及装置与制造工艺

本发明涉及互联网技术领域,特别是涉及一种数据的匹配方法及装置。



背景技术:

随着互联网技术的快速发展及广泛应用,越来越多的用户更加倾向于使用互联网进行日常工作,伴随着互联网在日常工作中的使用,用户对互联网的数据安全性的需求也越来越高,例如:通过互联网获取到的数据资源也越来越丰富,例如:在发送邮件时,将邮件数据通过Base64进行编码,使编码后的邮件数据具有字符可见性。

其中,Base64编码原理为邮件数据在互联网以字节进行传输,将三个8位的字符转化为四个6位的字符,再通过Base64编码转换表将转换为四个6位的字符进行编码。当需要在编码后的邮件数据中搜索某个关键词时,需要首先对编码后的字符串进行解码,在基于解码后的字符串搜索某个关键词。但是,繁琐的搜索过程,既需要消耗大量的解码计算量,并且解码时依赖巨大的存储空间开销。



技术实现要素:

有鉴于此,本发明提供的一种数据的匹配方法及装置,主要目的在于解决现有技术中在数据匹配过程中,匹配过程复杂繁琐,不仅需要消耗大量的解码计算量,而且解码时浪费大量内存的问题。

依据本发明一个方面,本发明提供了一种数据的匹配方法,该方法包括:

获取模式串,并将所述模式串按照Base64编码规则进行编码;

将编码后的模式串与目标串进行匹配,获得匹配结果;其中,所述目标串为使用所述Base64编码规则编码后的字符串。

可选的,将所述模式串按照Base64编码规则进行编码包括:

确定所述模式串的长度;

若所述模式串的长度大于或者等于3,将所述模式串按照Base64编码规则编码时使用的字符个数进行切分,获得至少一个模式子串,并根据所述Base64编码规则对所述模式子串进行编码;

若所述模式串的长度为1,将所述模式串作为编码时分别对应的第一个字符、第二个字符及第三个字符,并根据所述Base64编码规则对所述模式串进行编码。

可选的,将所述模式串按照Base64编码规则对应的个数进行切分,获得至少一个模式子串,包括:

将所述模式串的末尾部分作为切分所述模式串的起点,并按所述模式串的倒序顺序对所述模式串进行切分,得到至少一个包含三个字符的模式子串;

其中,所述模式子串中字符的排列顺序与所述模式串中的正序排列的顺序相同,且所述模式子串中的三个字符分别为第一个字符、第二个字符及第三个字符。

可选的,将所述模式串的末尾部分作为切分所述模式串的起点,并按所述模式串的倒序顺序对所述模式串进行切分包括:

通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第一模式子串集合;其中,所述第一切分方式用于将所述模式串中的第三个字符作为切分起点;

通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第二模式子串集合;其中,所述第二切分方式用于将所述模式串中的第二个字符作为切分起点,并在所述模式串中的第三个字符后添加两个预设补位符号,组成一个模式子串;

通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第三模式子串集合;其中,所述第三切分方式用于将所述模式串中的第一个字符作为切分起点,并在所述模式串中的第二个字符以及第三个字符后添加一个预设补位符号,组成一个模式子串。

可选的,根据所述Base64编码规则对所述模式子串进行编码包括:

分别对所述第一模式子串集合、所述第二模式子串集合及所述第三模式子串集合,基于所述Base64编码规则进行编码;其中,包含三个字符的模式子串在编码后转换为包含四个字符的编码后的模式串,编码后的模式子串中的四个字符分别为编码后的第一个字符、编码后的第二个字符、编码后的第三个字符及编码后的第四个字符。

可选的,将编码后的模式子串与目标串进行匹配包括:

将编码后的第一模式子串集合划分为第一当前匹配部分及第一待匹配部分、将编码后的第二模式子串集合划分为第二当前匹配部分及第二待匹配部分及将编码后的第三模式子串集合划分为第三当前匹配部分及第三待匹配部分;其中,当当前匹配部分与所述目标串匹配成功后,将所述待匹配部分与所述目标串进行匹配;

分别确定所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分的匹配起点;其中,当前匹配部分包含一个匹配起点及一个匹配结束点,且所述匹配起点为切分起点;待匹配部分为与所述匹配结束点相邻的字符至所述第一模式子串集合对应的编码后的第一个字符;

根据预设字符串后缀匹配算法,从所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分分别对应的匹配起点开始与所述目标串并行执行匹配。

可选的,根据预设字符串后缀匹配算法,从所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分分别对应的匹配起点开始与所述目标串并行执行匹配,包括:

分别确定第一模式子串集合、第二模式子串集合及第三模式子串集合中字符串的字符串长度信息;

根据所述字符串长度信息确定所述匹配起点对应所述目标串的第一当前匹配位置;

判断所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符是否一致;

若确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符不一致,则根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃,直到匹配完所述目标串中的所有字符;

若确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符一致,则根据预设字符串后缀匹配算法继续顺序匹配当前匹配部分的其他字符,直到匹配完成匹配结束点对应编码后的字符,并继续匹配所述待匹配部分对应的编码后的字符。

可选的,在根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃之后,所述方法还包括:

确定所述匹配起点对应所述目标串的第二当前匹配位置,并获取所述第二当前匹配位置在所述目标串中的位数;

将第二当前匹配位置在所述目标串中的位数与4进行求余运算;

若求余运算结果为零,则根据所述预设字符串后缀匹配算法执行所述匹配起点对应的编码后的字符与所述目标串中第二当前匹配位置对应的字符的匹配;

根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃包括:

若求余运算结果不为零,则在所述目标串上增加跳跃距离,直到增加的跳跃距离对应的当前匹配位置在所述目标串中的位数与4进行求余运算,所得到的求余运算结果为零。

可选的,所述方法还包括:

若所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配成功,则确定所述模式串与所述目标串匹配成功;

若所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配失败,则确定所述模式串与所述目标串匹配失败;

若所述第二模式子串集合及所述第三模式子串集合中所述待匹配部分的字符与所述目标串匹配成功,则将第二模式子串集合及第三模式子串集合中的剩余部分分别与所述目标串进行匹配;所述剩余部分为所述第二模式子串集合及所述第三模式子串集合中,除当前匹配部分及待匹配部分外的字符;

若第二模式子串集合和/或第三模式子串集合中的剩余部分分别与所述目标串匹配成功,则确定所述模式串与所述目标串匹配成功;

若将第二模式子串集合和第三模式子串集合中的剩余部分分别与所述目标串匹配失败,则确定所述模式串与所述目标串匹配失败。

可选的,将所述模式串作为编码时分别对应的第一个字符、第二个字符及第三个字符,并根据所述Base64编码规则对所述模式串进行编码包括:

通过第一编码方式按照所述Base64编码规则对所述模式串进行编码,得到第一编码字符及第二编码字符;所述第一编码方式为将所述模式串作为所述Base64编码规则编码时对应的第一个字符,所述第一编码字符中包含所述模式串中的前六位,所述第二编码字符中包含所述模式串中的后两位;

通过第二编码方式按照所述Base64编码规则对所述模式串进行编码,得到第三编码字符及第四编码字符;所述第二编码方式为将所述模式串作为所述Base64编码规则编码时对应的第二个字符,所述第三编码字符中包含模式串中的前四位,所述第四编码字符中包含所述模式串中的后四位;

通过第三编码方式按照所述Base64编码规则对所述模式串进行编码,得到第五编码字符串及第六编码字符;所述第三编码方式为将所述模式串作为所述Base64编码规则编码时对应的第三个字符,所述第五编码字符包含所述模式串中的前两位,所述第六编码字符包含所述模式串中的后六位。

可选的,若所述模式串采用第一编码方式进行编码,将编码后的模式串与所述目标串进行匹配包括:

确定所述第一编码字符对应所述目标串中的第四当前匹配位置,并确定所述第二编码字符对应所述目标串中第五当前匹配位置;

获取所述第四当前匹配位置在所述目标串中位数;

计算所述第四当前匹配位置在所述目标串中位数与4的余数;

若确定求余结果为1,则将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配;

若确定求余结果不为1,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

可选的,在将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配之后,所述方法还包括:

判断所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符是否匹配成功;

若确定匹配不成功,则根据所述目标串的顺序执行匹配操作;

若确定匹配成功,则对所述第二编码字符进行解码,获得包含六位的二进制字符串,并对所述第五当前匹配位置对应的字符进行解码,将解码后的第二编码字符中的第三位、第四位、与解码后的第五当前匹配位置对应字符的第三位、第四位进行匹配。

可选的,若所述模式串采用第二编码方式进行编码,将编码后的模式串与所述目标串进行匹配包括:

确定所述第三编码字符对应所述目标串中的第六当前匹配位置,并确定所述第四编码字符对应所述目标串中第七当前匹配位置;

获取所述第七当前匹配位置在所述目标串中位数;

计算所述第七当前匹配位置在所述目标串中位数与4的余数;

若确定求余结果为2,则对所述第三编码字符进行解码,获得包含六位的二进制字符串,并对所述第六当前匹配位置对应的字符进行解码,将解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配;

若确定求余结果不为2,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

可选的,在将解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配之后,所述方法还包括:

确定解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位是否匹配成功;

若匹配失败,则根据所述目标串的顺序执行匹配操作;

若匹配成功,则对所述第四编码字符进行解码,获得包含六位的二进制字符串,并对所述第七当前匹配位置对应的字符进行解码,将解码后的第四编码字符中的前六位、与解码后的第七当前匹配位置对应字符的前六位进行匹配。

可选的,若所述模式串采用第三编码方式进行编码,将编码后的模式串与所述目标串进行匹配包括:

确定所述第五编码字符对应所述目标串中的第八当前匹配位置,并确定所述第六编码字符对应所述目标串中第九当前匹配位置;

获取所述第九当前匹配位置在所述目标串中位数;

计算所述第九当前匹配位置在所述目标串中位数与4的余数;

若确定求余结果为0,则将所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符进行匹配;

若确定求余结果不为0,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

可选的,在将所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符进行匹配之后,所述方法还包括:

判断所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符是否匹配成功;

若确定匹配失败,则根据所述目标串的顺序执行匹配操作;

若确定匹配成功,则对所述第五编码字符进行解码,获得包含六位的二进制字符串,并对所述第八当前匹配位置对应的字符进行解码,将解码后的第五编码字符中的后两位、与解码后的第八当前匹配位置对应字符的后两位进行匹配。

可选的,将所述模式串按照Base64编码规则进行编码还包括:

若模式串的长度为2,则根据所述Base64编码规则对所述模式串中包含的第一个字符及第二个字符进行编码;

所述将编码后的模式串与目标串进行匹配,获得匹配结果包括:

将编码后的第一个字符与所述目标串进行匹配,待编码后的第一个字符与所述目标串匹配成功后,将编码后的第二个字符与所述目标串进行匹配。

依据本发明另一个方面,本发明提供了一种数据的匹配装置,该装置包括:

第一获取单元,用于获取模式串;

编码单元,用于将所述第一获取单元获取的所述模式串按照Base64编码规则进行编码;

匹配单元,用于将所述编码单元编码后的模式串与目标串进行匹配;其中,所述目标串为使用所述Base64编码规则编码后的字符串。

第二获取单元,用于在所述匹配单元将编码后的模式子串与目标串进行匹配后,获得匹配结果。

可选的,所述编码单元包括:

确定子单元,用于确定所述模式串的长度;

第一处理子单元,用于当所述模式串的长度大于或者等于3时,将所述模式串按照Base64编码规则编码时使用的字符个数进行切分,获得至少一个模式子串;

第一编码子单元,用于根据所述Base64编码规则对所述处理子单元处理后的所述模式子串进行编码;

第二编码子单元,用于当所述模式串的长度为1时,将所述模式串作为编码时分别对应的第一个字符、第二个字符及第三个字符,并根据所述Base64编码规则对所述模式串进行编码。

可选的,所述第一处理子单元,还用于将所述模式串的末尾部分作为切分所述模式串的起点,并按所述模式串的倒序顺序对所述模式串进行切分,得到至少一个包含三个字符的模式子串;

其中,所述模式子串中字符的排列顺序与所述模式串中的正序排列的顺序相同,且所述模式子串中的三个字符分别为第一个字符、第二个字符及第三个字符。

可选的,所述第一处理子单元包括:

第一切分模块,用于通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第一切分方式用于将所述模式串中的第三个字符作为切分起点;

第一获取模块,用于在所述第一切分模块通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分后,得到第一模式子串集合;

第二切分模块,用于通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第二切分方式用于将所述模式串中的第二个字符作为切分起点,并在所述模式串中的第三个字符后添加两个预设补位符号,组成一个模式子串;

第二获取模块,用于在所述第二切分模块通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分得到第二模式子串集合;

第三切分模块,用于通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第三切分方式用于将所述模式串中的第一个字符作为切分起点,并在所述模式串中的第二个字符以及第三个字符后添加一个预设补位符号,组成一个模式子串;

第三获取模块,用于在所述第三切分模块通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分之后,得到第三模式子串集合。

可选的,所述第一编码子单元包括:

第一编码模块,用于对所述第一模式子串集合基于所述Base64编码规则进行编码;

第二编码模块,用于对所述第二模式子串集合基于所述Base64编码规则进行编码;

第三编码模块,用于对所述第三模式子串集合基于所述Base64编码规则进行编码;

其中,包含三个字符的模式子串在编码后转换为包含四个字符的编码后的模式串,编码后的模式子串中的四个字符分别为编码后的第一个字符、编码后的第二个字符、编码后的第三个字符及编码后的第四个字符。

可选的,所述匹配单元包括:

划分子单元,用于将编码后的第一模式子串集合划分为第一当前匹配部分及第一待匹配部分、将编码后的第二模式子串集合划分为第二当前匹配部分及第二待匹配部分及将编码后的第三模式子串集合划分为第三当前匹配部分及第三待匹配部分;其中,当当前匹配部分与所述目标串匹配成功后,将所述待匹配部分与所述目标串进行匹配;

确定子单元,用于分别确定所述划分子单元划分的所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分的匹配起点;其中,当前匹配部分包含一个匹配起点及一个匹配结束点,且所述匹配起点为切分起点;待匹配部分为与所述匹配结束点相邻的字符至所述第一模式子串集合对应的编码后的第一个字符;

匹配子单元,用于根据预设字符串后缀匹配算法,从所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分分别对应的匹配起点开始与所述目标串并行执行匹配。

可选的,所述匹配子单元包括:

第一确定模块,用于分别确定第一模式子串集合、第二模式子串集合及第三模式子串集合中字符串的字符串长度信息;

第二确定模块,用于根据所述第一确定模块确定的所述字符串长度信息确定所述匹配起点对应所述目标串的第一当前匹配位置;

判断模块,用于判断所述匹配起点对应的编码后的字符与所述第二确定模块确定的所述目标串中第一当前匹配位置对应的字符是否一致;

跳跃模块,用于当所述判断模块确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符不一致时,根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃,直到匹配完所述目标串中的所有字符;

处理模块,用于当所述判断模块确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符一致时,根据预设字符串后缀匹配算法继续顺序匹配当前匹配部分的其他字符,直到匹配完成匹配结束点对应编码后的字符,并继续匹配所述待匹配部分对应的编码后的字符。

可选的,所述匹配子单元还包括:

第三确定模块,用于在所述跳跃模块根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃之后,确定所述匹配起点对应所述目标串的第二当前匹配位置;

获取模块,用于获取所述第三确定模块确定的所述第二当前匹配位置在所述目标串中的位数;

运算模块,用于将所述获取模块获取的第二当前匹配位置在所述目标串中的位数与4进行求余运算;

第一匹配模块,用于当所述运算模块计算的求余运算结果为零时,根据所述预设字符串后缀匹配算法执行所述匹配起点对应的编码后的字符与所述目标串中第二当前匹配位置对应的字符的匹配;

所述跳跃模块,还用于当求余运算结果不为零时,在所述目标串上增加跳跃距离,直到增加的跳跃距离对应的当前匹配位置在所述目标串中的位数与4进行求余运算,所得到的求余运算结果为零。

可选的,所述匹配子单元还包括:

第四确定模块,用于当所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配成功时,确定所述模式串与所述目标串匹配成功;

第五确定模块,用于当所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配失败时,确定所述模式串与所述目标串匹配失败;

第二匹配模块,用于当所述第二模式子串集合及所述第三模式子串集合中所述待匹配部分的字符与所述目标串匹配成功时,将第二模式子串集合及第三模式子串集合中的剩余部分分别与所述目标串进行匹配;所述剩余部分为所述第二模式子串集合及所述第三模式子串集合中,除当前匹配部分及待匹配部分外的字符;

第六确定模块,用于当第二模式子串集合和/或第三模式子串集合中的剩余部分分别与所述目标串匹配成功时,确定所述模式串与所述目标串匹配成功;

第七确定模块,用于当第二模式子串集合和第三模式子串集合中的剩余部分分别与所述目标串匹配失败时,确定所述模式串与所述目标串匹配失败。

可选的,第二编码子单元包括:

第一编码模块,用于通过第一编码方式按照所述Base64编码规则对所述模式串进行编码;所述第一编码方式为将所述模式串作为所述Base64编码规则编码时对应的第一个字符,所述第一编码字符中包含所述模式串中的前六位,所述第二编码字符中包含所述模式串中的后两位;

第一获取模块,用于在所述第一编码模块通过第一编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第一编码字符及第二编码字符;

第二编码模块,用于通过第二编码方式按照所述Base64编码规则对所述模式串进行编码;所述第二编码方式为将所述模式串作为所述Base64编码规则编码时对应的第二个字符,所述第三编码字符中包含模式串中的前四位,所述第四编码字符中包含所述模式串中的后四位;

第二获取模块,用于在所述第二编码模块通过第二编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第三编码字符及第四编码字符;

第三编码模块,用于通过第三编码方式按照所述Base64编码规则对所述模式串进行编码;所述第三编码方式为将所述模式串作为所述Base64编码规则编码时对应的第三个字符,所述第五编码字符包含所述模式串中的前两位,所述第六编码字符包含所述模式串中的后六位;

第三获取模块,用于在所述第三编码模块通过第三编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第五编码字符串及第六编码字符。

可选的,当所述模式串采用第一编码方式进行编码时,所述匹配单元包括:

第一确定子单元,用于确定所述第一编码字符对应所述目标串中的第四当前匹配位置,并确定所述第二编码字符对应所述目标串中第五当前匹配位置;

第一获取子单元,用于获取所述第一确定子单元确定的所述第四当前匹配位置在所述目标串中位数;

第一计算子单元,用于计算所述第一获取子单元获取的所述第四当前匹配位置在所述目标串中位数与4的余数;

第一匹配子单元,用于当确定所述第一计算子单元的求余结果为1时,将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配;

第一处理子单元,用于当确定所述第一计算子单元的求余结果不为1时,继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

可选的,所述匹配单元还包括:

第一判断子单元,用于在所述匹配子单元将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配之后,判断所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符是否匹配成功;

第二处理子单元,用于当所述第一判断子单元确定匹配不成功时,根据所述目标串的顺序执行匹配操作;

第一解码子单元,用于当所述第一判断子单元确定匹配成功时,对所述第二编码字符进行解码,获得包含六位的二进制字符串,并对所述第五当前匹配位置对应的字符进行解码;

第二匹配子单元,用于将所述第一解码子单元解码后的第二编码字符中的第三位、第四位、与解码后的第五当前匹配位置对应字符的第三位、第四位进行匹配。

可选的,当所述模式串采用第二编码方式进行编码时,所述匹配单元包括:

第二确定子单元,用于确定所述第三编码字符对应所述目标串中的第六当前匹配位置,并确定所述第四编码字符对应所述目标串中第七当前匹配位置;

第二获取子单元,用于获取所述第二确定子单元确定的所述第七当前匹配位置在所述目标串中位数;

第二计算子单元,用于计算所述第二获取子单元获取的所述第七当前匹配位置在所述目标串中位数与4的余数;

第二解码子单元,用于当所述第二计算子单元确定求余结果为2时,对所述第三编码字符进行解码,获得包含六位的二进制字符串,并对所述第六当前匹配位置对应的字符进行解码;

第三匹配子单元,用于将所述第二解码子单元解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配;

第三处理子单元,用于当所述第二计算子单元确定求余结果不为2,继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

借由上述技术方案,本发明提供的数据的匹配方法及装置,获取模式串,并将模式串按照Base64编码规则进行编码;将编码后的模式串与目标串进行匹配,获得匹配结果;与现有技术相比,本发明在数据匹配时,将模式串进行编码,并与同样编码的目标串进行匹配,无需将编码后的目标串进行解码,既能够节省所占用的巨大存储空间,又能大大减少解码所需的计算量。

附图说明

图1示出了本发明实施例提供的一种数据的匹配方法的流程图;

图2示出了本发明实施例提供的一种将编码后的模式子串与目标串进行匹配的流程图;

图3示出了本发明实施例提供的一种方式模式子串集合中当前匹配部分及待匹配部分的示意图;

图4示出了本发明实施例提供的一种编码后的模式串与目标串进行匹配的示意图;

图5示出了本发明实施例提的一种数据的匹配装置的组成框图;

图6示出了本发明实施例提的另一种数据的匹配装置的组成框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明实施例提供一种数据的匹配方法,如图1所示,所述方法包括:

101、获取模式串,并将所述模式串按照Base64编码规则进行编码。

在实际应用过程中,模式串根据用户的实际需求确定。对于模式串的确定,可用于在Base64编码后的邮件中搜索某个关键词的应用场景中,该关键词为用户确定的任意字符串,例如:关键词为abcd;本发明实施例对实现的具体应用场景不作限定,但是,需要明确的是,图1所示的方法只能应用于模式串等于或者大于3的情况,对于模式串小于3的情况,会在本发明实施例的以下实现过程中详细说明。

现有技术中,在从Base64编码后的目标串中匹配数据时,需要将编码后的目标串进行解码,解码成功后在使用模式串进行匹配,该种实现方式虽然也能够完成匹配搜索,但是,匹配数据的过程解码计算量较大,并且浪费大量的存储空间。

本发明实施例中,通过将模式串进行编码,使用编码后的模式串与目标串进行匹配,能够减少解码目标串时所占用的存储空间,并且大大降低了解码目标串的计算量,从而提高了数据的搜索速度。在具体实现过程中,通过Base64编码规则对所述模式串进行编码,Base64编码规则包括:将3个字节转换为4个字节,并且,在转换后的4个字节中,通过转换表将由8位组成的字节转换为一个明文字符。

为了更加清楚的理解Base64编码,以下将以示例的形式对编码过程进行详细说明,假设,模式串的长度为3,所述模式串为转换前10101101 10111010 01110110(模式串在计算机中存储时以二进制形式存储),在执行Base64编码时,首先,将二进制的包含三个字符(每个字符8位表示)的模式串转换为四个字符的模式串(每个字符6为表示,其中,高两位为00),转换后模式串为:00101011 00011011 00101001 00110110;其次,将转换后的模式串中包含的4个字符用十进制的形式表示,模式串的十进制表示为:43 27 41 54;最后,通过Base64编码转换表查找模式串对应的字符,如表1所示,表1示出了Base64编码转换表,通过表1可以确定模式串编码后的字符为:r b p 2。

表1

以上已详细说明了Base64编码的过程,需要补充说明的是,若在编码后发现模式子串中剩下两个字符时,在编码结果后加一个“=”;若在编码后发现模式子串中剩下一个字符时,在编码结果后加两个“=”,以确保数据编码后再还原的正确性。

102、将编码后的模式串与目标串进行匹配,获得匹配结果。

其中,所述目标串为使用所述Base64编码规则编码后的字符串。

在数据匹配过程中,模式子串与目标串均为编码后的数据,可以直接进行匹配,匹配完成后,若编码后的模式子串与目标串一致,则匹配成功;若编码后的模式子串与目标串不一致,则匹配失败。

本发明实施例提供的数据的匹配方法,获取模式串,并将模式串按照Base64编码规则进行编码;将编码后的模式串与目标串进行匹配,获得匹配结果;与现有技术相比,本发明实施例在数据匹配时,将模式串进行编码,并与同样编码的目标串进行匹配,无需将编码后的目标串进行解码,既能够节省所占用的巨大存储空间,又能大大减少解码所需的计算量。

进一步的,作为对上述实施例的细化和扩展,有上述实施例可知获取的模式串的长度为不确定数,此外,由Base64编码规则可知,其编码原理为将3个字节转换为4个字节,并且,在转换后的4个字节中,通过转换表将由8位组成的字节转换为一个明文字符,在执行步骤101将所述模式串按照Base64编码规则进行编码时,严格根据编码原理确定模式串的长度,当模式串长度大于或者等于3时,若所述模式串的长度大于或者等于3,将所述模式串按照Base64编码规则编码时使用的字符个数进行切分,获得至少一个模式子串,并根据所述Base64编码规则对所述模式子串进行编码;若所述模式串的长度为1,将所述模式串作为编码时分别对应的第一个字符(下述实施例中的A1)、第二个字符(下述实施例中的A2)及第三个字符(下述实施例中的A3),并根据所述Base64编码规则对所述模式串进行编码;当模式串的长度为2,则根据所述Base64编码规则对所述模式串中包含的第一个字符及第二个字符进行编码。以下将对不同长度的模式串,详细说明编码、匹配的具体实现过程。

对长度大于或者等于3的模式串进行切分,将模式串按照Base编码规则编码时使用的字符个数(3个字符)进行切分,并获得至少一个模式子串。示例1,假设,模式串为:C=(C1C2…Cn)=((C11C112…C18)(C21C22…C28)…(Cn1Cn2…Cn8)),其中,其中n为等于或者大于3的正整数,表示模式串包含的字节数,Ci表示i个字符,Cij表示Ci的第j个位(比特)。示例2,承由上述示例1,若n为4,将模式串切分后,得到的模式串的模式子串为两个,第一个模式子串包括24位:((C11C12…C18)(C21C22…C28)(C31C32…C3n))及第二个模式子串包括8位(C41C42…C48)。需要说明的是,在对模式串进行切分时,可能会出现示例2所示的情况,即模式串的第二个模式子串(C41C42…C48)为一个字节(8位),在使用Base64编码进行编码时,不符合Base64编码规则,因此,在实际应用中,对于不足三个字节(24位)的字符,使用0将不足的位数补足。

由于目标串为编码后的字符串,在模式串编码后与目标串匹配时,并不能确定目标串在编码前如何对编码前的目标串进行的切分,不同的切分方式会得到不同的编码结果,但是,对于Base64编码而言,同一字符串,最多会出现三种不同的编码方式;示例性的,Base64编码将3个8比特的字节(假设为(A1A2A3)),编码为4个6比特的字节(假设为(B1B2B3B4)),若编码前的目标串D(D1D2…Dn)包含n个字符(n>10),再具体编码时会存在以下三种情况,第一:编码前的目标串中的字符Dn被作为A3编码;第二:编码前的目标串中的字符Dn-1被作为A3编码;第三,编码前的目标串中的字符Dn-2被作为A3编码。上述三种情况包含使用Base64编码的所有可能。

在不确定目标串编码前的类型前,在对模式串进行编码时,要包含上述三种情况的编码方式,以确保编码后的模式串与目标串进行匹配。不同的编码方式是由不同的切分结果造成的,因此,在执行将所述模式串按照Base64编码规则编码时使用的字符个数进行切分时,将所述模式串的末尾部分作为切分所述模式串的起点,并按所述模式串的倒序顺序对所述模式串进行切分,得到至少一个包含三个字符的模式子串;其中,所述模式子串中字符的排列顺序与所述模式串中的正序排列的顺序相同,且所述模式子串中的三个字符分别为第一个字符、第二个字符及第三个字符;示例性的,假设,模式子串为(abc),其中,a为模式子串的第一个字符,b为模式子串的第二个字符,c为模式子串的第三个字符。需要说明的是,所述末尾部分不仅仅只包含模式串的最后一个字符,还包括模式串的倒数第二个字符及倒数第三个字符。

由以上描述可知,不同的切分方式,在使用Base64编码规则对模式串编码的结果,直接导致编码后的模式串与目标串的匹配结果不同,以下针对不同的切分方式进行详细描述:

第一种方式:通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第一模式子串集合;其中,所述第一切分方式用于将所述模式串中的第三个字符作为切分起点。

按照模式串的倒序顺序进行切分,其目的在于,本发明实施例在后续执行编码后的模式串与目标串的匹配时采用预设字符串后缀匹配算法,以提高匹配的速度。但是,该种说明方式并非意在限定在对模式串切分时,只能按照模式串的倒序顺序进行切分。

在实际操作中,第一种方式为将模式串C=(C1C2…Cn)=((C11C112…C18)(C21C22…C28)…(Cn1Cn2…Cn8))中的Cn被作为A3编码,因此,在切分模式串时,从模式串的最后一个字符开始执行切分。示例性的,采用第一种切分方式可以将模式串切分为以下模式串集合:C=(C1C2…Cn)=(……(C(n-5)1C(n-5)2…C(n-5)8)(C(n-4)1C(n-4)2…C(n-4)8)(C(n-3)1C(n-3)2…C(n-3)8)、(C(n-2)1C(n-2)2…C(n-2)8)(C(n-1)1C(n-1)2…C(n-1)8)(Cn1Cn2…Cn8)),其中,n为大于6的正整数,在具体执行切分时,需要根据n来确定。以上仅为示例性的举例,本发明实施例对模式串包含的内容及数量不作限定。

在对模式串进行切分得到第一模式子串集合之后,基于Base64编码规则进行编码对第一模式子串集合进行编码,当n不同时,会得到以下编码结果:

(1)若n%3==0,则编码后的第一模式子串集合Q为:Q=(00C11C12…C16)(C17C18…C24)…(Cn3Cn4…Cn8)。

(2)若n%3==1,则编码后的第一模式子串集合Q必然为:Q=(00XXXXC11C12)(00C13C14…C18)(00C21C22…C26)…(00Cn3Cn4…Cn8),其中,X为任意比特。

(3)若n%3==2,则编码后的第一模式子串集合Q必然为:Q=(00XXC11C12C13C14)(00C15C16…C22)…(00Cn3Cn4…Cn8),其中,X为任意比特。

第二种方式:通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第二模式子串集合;其中,所述第二切分方式用于将所述模式串中的第二个字符作为切分起点,并在所述模式串中的第三个字符后添加两个预设补位符号,组成一个模式子串。

有关对模式串按照倒序顺序切分的目的,请参考上述第一种方式的说明,本发明实施例在此不再进行赘述。

在实际操作中,第二种方式为将模式串C=(C1C2…Cn)=((C11C112…C18)(C21C22…C28)…(Cn1Cn2…Cn8))中的Cn-1被作为A3编码,切分后得到的第二模式子串集合为C=(C1C2…Cn)=(…(C(n-6)1C(n-6)2…C(n-6)8)(C(n-5)1C(n-5)2…C(n-5)8)(C(n-4)1C(n-4)2…C(n-4)8)、(C(n-3)1C(n-3)2…C(n-3)8)(C(n-2)1C(n-2)2…C(n-2)8)(C(n-1)1C(n-1)2…C(n-1)8)、(Cn1Cn2…Cn8)(00…0)(00…0),其中,n为大于7的正整数,并且上述第二模式子串集合中顿号与顿号之间代表一个模式子串,需要说明的是,上述撰写方式是为了便于理解一个模式子串集合中包含多个模式子串,并非意在限定计算机在切分时对模式子串集合的存储形式。

在对模式串进行切分得到第二模式子串集合之后,基于Base64编码规则进行编码对第二模式子串集合进行编码。在对模式串进行切分得到第二模式子串集合之后,基于Base64编码规则进行编码对第二模式子串集合进行编码,当n不同时,会得到以下编码结果:

(1)若n%3==0,则编码后的第一模式子串集合Q为:Q=(00XXC11C12C13C14)(00C15C16…C22)…(00C(n-1)3C(n-1)4…C(n-1)8)(00Cn1Cn2…Cn6)(00Cn7Cn8XXXX),其中,X为任意比特。

(2)若n%3==1,则编码后的第一模式子串集合Q为:Q=(00C11C12…C16)(C17C18…C24)…(00C(n-1)3C(n-1)4…C(n-1)8)(00Cn1Cn2…Cn6)(00Cn7Cn8XXXX),其中,X为任意比特。

(3)若n%3==2,则编码后的第一模式子串集合Q为:Q=00XXXXC11C12)(00C13C14…C18)…(00C(n-1)3C(n-1)4…C(n-1)8)(00Cn1Cn2…Cn6)(00Cn7Cn8XXXX),其中,X为任意比特。

第三种方式:通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分,得到第三模式子串集合;其中,所述第三切分方式用于将所述模式串中的第一个字符作为切分起点,并在所述模式串中的第二个字符以及第三个字符后添加一个预设补位符号,组成一个模式子串。

有关对模式串按照倒序顺序切分的目的,请参考上述第一种方式的说明,本发明实施例在此不再进行赘述。

在实际操作中,第三种方式为将模式串C=(C1C2…Cn)=((C11C112…C18)(C21C22…C28)…(Cn1Cn2…Cn8))中的Cn-2被作为A3编码,因此,在切分模式串时,从模式串的倒数第二个字符开始执行切分。示例性的,采用第三种切分方式可以将模式串切分为以下模式串集合:C=(C1C2…Cn)=(……(C(n-4)1C(n-4)2…C(n-4)8)(C(n-3)1C(n-3)2…C(n-3)8)(C(n-2)1C(n-2)2…C(n-2)8)、(C(n-1)1C(n-1)2…C(n-1)8)(Cn1Cn2…Cn8)(00…0)),其中,n为大于5的正整数,在具体执行切分时,需要根据n来确定。

在对模式串进行切分得到第三模式子串集合之后,基于Base64编码规则进行编码对第三模式子串集合进行编码,当n不同时,会得到以下编码结果:

(1)若n%3==0,则编码后的第一模式子串集合Q为:Q=(00XXXXC11C12)(00C13C14…C18)(00C21C22…C26)…(00C(n-2)3C(n-2)4…C(n-2)8)(00C(n-1)1C(n-1)2…C(n-1)6)(00C(n-1)7C(n-1)8…Cn4)(00Cn5Cn6Cn7Cn8XX)),其中,X为任意比特。

(2)若n%3==1,则编码后的第一模式子串集合Q为:Q=(00C11C12…C16)(C17C18…C24)…(00C(n-2)3C(n-2)4…C(n-2)8)(00C(n-1)1C(n-1)2…C(n-1)6)(00C(n-1)7C(n-1)8…Cn4)(00Cn5Cn6Cn7Cn8XX)),其中,X为任意比特。

(3)若n%3==2,则编码后的第一模式子串集合Q为:Q=(00C11C12…C16)(C17C18…C24)…(00C(n-2)3C(n-2)4…C(n-2)8)(00C(n-1)1C(n-1)2…C(n-1)6)(00C(n-1)7C(n-1)8…Cn4)(00Cn5Cn6Cn7Cn8XX)),其中,X为任意比特。

需要说明的是,在通过上述三种方式对模式串进行切分时,并非是采用上述三种方式中的其中一种,而是,一个模式串在切分时,同时采用上述三种方式进行切分,在将编码后的模式串与目标串进行匹配时,也是基于不同的切分方式产生三个不同的编码后的模式串,并行的与目标串进行匹配。

进一步的,作为对上述实施例的细化和扩展,在执行将编码后的模式子串与目标串进行匹配时,可以采用但不局限于以下方法实现,如图2所示,所述方法包括:

201、对编码后的模式子串集合划分当前匹配部分及待匹配部分。

在本发明实施例中,在对模式子串集合划分当前匹配部分及待匹配部分时,需要对上述三种切分方式产生的不同编码后的模式子串集合,分别划分当前匹配部分及待匹配部分,即:将编码后的第一模式子串集合划分为第一当前匹配部分及第一待匹配部分、将编码后的第二模式子串集合划分为第二当前匹配部分及第二待匹配部分及将编码后的第三模式子串集合划分为第三当前匹配部分及第三待匹配部分;其中,当当前匹配部分与所述目标串匹配成功后,将所述待匹配部分与所述目标串进行匹配。

为了便于对模式子串集合进行划分当前匹配部分及待匹配部分进行说明,如图3所示,图3示出了本发明实施例提供的一种方式模式子串集合中当前匹配部分及待匹配部分的示意图,如图所示,该编码后的模式子串集合,为对采用上述第三种方式切分的所得的模式子串集合编码所得,且n%3==0,编码后的第一模式子串集合Q为:Q=(00XXXXC11C12)(00C13C14…C18)…(00C(n-1)1C(n-1)2…C(n-1)6)(00C(n-1)7C(n-1)8…Cn4)(00Cn5Cn6Cn7Cn8XX)),其中,X为任意比特。

202、分别确定所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分的匹配起点。

其中,当前匹配部分包含一个匹配起点及一个匹配结束点,且所述匹配起点为切分起点;待匹配部分为与所述匹配结束点相邻的字符至所述第一模式子串集合对应的编码后的第一个字符。所述匹配起点以及匹配结束点,如图3所示。

203、根据预设字符串后缀匹配算法,从所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分分别对应的匹配起点开始与所述目标串并行执行匹配。

执行匹配个过程具体包括:分别确定第一模式子串集合、第二模式子串集合及第三模式子串集合中字符串的字符串长度信息;根据所述字符串长度信息确定所述匹配起点对应所述目标串的第一当前匹配位置;判断所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符是否一致;若确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符不一致,则根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃,直到匹配完所述目标串中的所有字符;若确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符一致,则根据预设字符串后缀匹配算法继续顺序匹配当前匹配部分的其他字符,直到匹配完成匹配结束点对应编码后的字符,并继续匹配所述待匹配部分对应的编码后的字符。

在首次执行当前匹配部分与目标串的匹配时,并非只将当前匹配部分与目标串标齐,而是将整个编码后的模式串与目标串标齐,但是在具体匹配过程中,首先从匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符处开始进行匹配。示例性的,如图4所示,图4示出了本发明实施例提供的一种编码后的模式串与目标串进行匹配的示意图,其中,模式串为ABCdef156gj,目标串为ArBmCuwde7f156gjp,在匹配时,模式串中A与目标串中的A标齐,模式串中的j与目标串中的f标齐,如图所示的模式串中的j与目标串中的f标齐并没有标齐,原因在于在图4中,为了便于清楚的标明匹配起点,在模式子串集合中的字符6与字符g之间添加了匹配起点的说明,在实际应用中不会对匹配起点进行标注;从匹配起点6开始于目标串执行匹配,需要说明的,图4仅为示例性的举例,具体的本发明实施例对编码后的模式串与目标串的内容不做限定。

进一步的,在具体执行匹配时,采用预设字符串后缀匹配算法,由于上述三个编码后的模式子串集合的末尾都对应于编码的B4,所以匹配起点对应的目标串中第一当前匹配位置处必然有i%4==0(i为第一当前匹配位置)。为了加快匹配速度,在根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃之后,确定所述匹配起点对应所述目标串的第二当前匹配位置,并获取所述第二当前匹配位置在所述目标串中的位数;将第二当前匹配位置在所述目标串中的位数与4进行求余运算;若求余运算结果为零,则根据所述预设字符串后缀匹配算法执行所述匹配起点对应的编码后的字符与所述目标串中第二当前匹配位置对应的字符的匹配;若求余运算结果不为零,则在所述目标串上增加跳跃距离,直到增加的跳跃距离对应的当前匹配位置在所述目标串中的位数与4进行求余运算,所得到的求余运算结果为零。其中,有关预设字符串后缀匹配算法的匹配过程本发明实施例在此不再进行一一赘述,所述预设字符串后缀匹配算法包括但不局限于BM算法、BNDA算法等等。

进一步的,匹配的过程对应两个匹配结果,即匹配成功以及匹配失败。在本发明实施例中,编码后的第一模式子串集合、第二模式子串集合及第三模式子串集合中,若匹配成功,可能是上述三个模式子串集合中的任意一个模式子串集合与目标串匹配成功,也可能是上述三个模式子串集合中的任意两个模式子串集合与目标串匹配成功;若匹配失败,上述三个模式子串集合均与目标串匹配失败。

对于匹配失败:

①若所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配失败,则确定所述模式串与所述目标串匹配失败;

②若所述第二模式子串集合及所述第三模式子串集合中所述待匹配部分的字符与所述目标串匹配成功,则将第二模式子串集合及第三模式子串集合中的剩余部分分别与所述目标串进行匹配;若将第二模式子串集合和第三模式子串集合中的剩余部分分别与所述目标串匹配失败,则确定所述模式串与所述目标串匹配失败。

对于匹配成功:

①若所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配成功,则确定所述模式串与所述目标串匹配成功;

②若所述第二模式子串集合及所述第三模式子串集合中所述待匹配部分的字符与所述目标串匹配成功,则将第二模式子串集合及第三模式子串集合中的剩余部分分别与所述目标串进行匹配;所述剩余部分为所述第二模式子串集合及所述第三模式子串集合中,除当前匹配部分及待匹配部分外的字符;若第二模式子串集合和/或第三模式子串集合中的剩余部分分别与所述目标串匹配成功,则确定所述模式串与所述目标串匹配成功。

在本发明实施例中,有关第二模式子串集合及第三模式子串集合中的剩余部分与目标串执行的匹配过程,请继续参阅下述实施例中有关当模式串长度为1时,模式串与目标串的详细说明,本发明实施例在此不再进行一一赘述。

进一步的,以上示例是以模式串的长度大于或者等于3为例进行的说明,但是,在实际应用中,也可能会模式串的长度小于3的情况。以下实施例会详细说明当模式串为1或者模式串为2时,如何执行模式串与目标串的匹配。

若模式串的长度为1,则根据所述Base64编码规则对所述模式串进行编码;将编码后的模式串与所述目标串进行匹配。由于模式串的长度只有1,不能满足Base64编码规则编码时所需的将3个字符转化为4个字符。在具体实现时,可以将模式串作为A1、A2、A3三种编码方式进行编码,如下:

第一、当模式串作为A1被编码时,即通过第一编码方式按照所述Base64编码规则对所述模式串进行编码,得到第一编码字符及第二编码字符;所述第一编码方式为将所述模式串作为所述Base64编码规则编码时对应的第一个字符,所述第一编码字符中包含所述模式串中的前六位,所述第二编码字符中包含所述模式串中的后两位。

示例性的,模式串A(A1A2…An),当A作为A1被编码时,得到的编码为(00A1A2…A6)(00A7A8XXXX),其中,X为任意比特。

第二、通过第二编码方式按照所述Base64编码规则对所述模式串进行编码,得到第三编码字符及第四编码字符;所述第二编码方式为将所述模式串作为所述Base64编码规则编码时对应的第二个字符,所述第三编码字符中包含模式串中的前四位,所述第四编码字符中包含所述模式串中的后四位。

示例性的,模式串A(A1A2…An),当A作为A2被编码时,得到的编码为(00XX A1A2A3A4)(00A5A6A7A8XX),其中,X为任意比特。

第三,通过第三编码方式按照所述Base64编码规则对所述模式串进行编码,得到第五编码字符串及第六编码字符;所述第三编码方式为将所述模式串作为所述Base64编码规则编码时对应的第三个字符,所述第五编码字符包含所述模式串中的前两位,所述第六编码字符包含所述模式串中的后六位。

示例性的,模式串A(A1A2…An),当A作为A3被编码时,得到的编码为(00XXXX A1A2)(00A3A4…A7A8),其中,X为任意比特。

进一步的,当模式串被作为不同的A1A2A3被编码时,在基于不同的编码后的模式串与目标串进行匹配时,匹配方法也不相同。

若所述模式串采用第一编码方式进行编码,将编码后的模式串与所述目标串进行匹配具体过程包括:确定所述第一编码字符对应所述目标串中的第四当前匹配位置,并确定所述第二编码字符对应所述目标串中第五当前匹配位置;获取所述第四当前匹配位置在所述目标串中位数;计算所述第四当前匹配位置在所述目标串中位数与4的余数;若确定求余结果为1,则将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配;判断所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符是否匹配成功;若确定匹配不成功,则根据所述目标串的顺序执行匹配操作;若确定匹配成功,则对所述第二编码字符进行解码,获得包含六位的二进制字符串,并对所述第五当前匹配位置对应的字符进行解码,将解码后的第二编码字符中的第三位、第四位、与解码后的第五当前匹配位置对应字符的第三位、第四位进行匹配。若确定求余结果不为1,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

若所述模式串采用第二编码方式进行编码,将编码后的模式串与所述目标串进行匹配的具体过程包括:确定所述第三编码字符对应所述目标串中的第六当前匹配位置,并确定所述第四编码字符对应所述目标串中第七当前匹配位置;获取所述第七当前匹配位置在所述目标串中位数;计算所述第七当前匹配位置在所述目标串中位数与4的余数;若确定求余结果为2,则对所述第三编码字符进行解码,获得包含六位的二进制字符串,并对所述第六当前匹配位置对应的字符进行解码,将解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配;确定解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位是否匹配成功;若匹配失败,则根据所述目标串的顺序执行匹配操作;若匹配成功,则对所述第四编码字符进行解码,获得包含六位的二进制字符串,并对所述第七当前匹配位置对应的字符进行解码,将解码后的第四编码字符中的前六位、与解码后的第七当前匹配位置对应字符的前六位进行匹配。若确定求余结果不为2,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

若所述模式串采用第三编码方式进行编码,将编码后的模式串与所述目标串进行匹配的具体过程包括:确定所述第五编码字符对应所述目标串中的第八当前匹配位置,并确定所述第六编码字符对应所述目标串中第九当前匹配位置;获取所述第九当前匹配位置在所述目标串中位数;计算所述第九当前匹配位置在所述目标串中位数与4的余数;若确定求余结果为0,则将所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符进行匹配;判断所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符是否匹配成功;若确定匹配失败,则根据所述目标串的顺序执行匹配操作;若确定匹配成功,则对所述第五编码字符进行解码,获得包含六位的二进制字符串,并对所述第八当前匹配位置对应的字符进行解码,将解码后的第五编码字符中的后两位、与解码后的第八当前匹配位置对应字符的后两位进行匹配。若确定求余结果不为0,则继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

进一步的,以上示例以详细说明当模式串的长度为1时,编码后的模式串与目标串的匹配过程,若模式串的长度为2,则根据所述Base64编码规则对所述模式串中包含的第一个字符及第二个字符进行编码;将编码后的第一个字符与所述目标串进行匹配,待编码后的第一个字符与所述目标串匹配成功后,将编码后的第二个字符与所述目标串进行匹配。需要说明的是,长度为2是模式串在执行编码,并使用编码后的模式串与目标串进行匹配时,首先按照上述模式串的长度为1的编码及匹配方式,当模式串中的第一个字符匹配成功后,继续采用相同的方式匹配模式串中的第二个字符,具体的实现过程,请参考上述模式串与目标串的匹配过程,具体的本发明实施例在此不再进行赘述。

进一步的,作为对上述图1所示方法的实现,本发明另一实施例还提供了一种数据的匹配装置。该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。

本发明实施例提供一种数据的匹配装置,如图5所示,所述装置包括:

第一获取单元51,用于获取模式串;

编码单元52,用于将所述第一获取单元52获取的所述模式串按照Base64编码规则进行编码;

匹配单元53,用于将所述编码单元53编码后的模式串与目标串进行匹配;其中,所述目标串为使用所述Base64编码规则编码后的字符串。

第二获取单元54,用于在所述匹配单元53将编码后的模式子串与目标串进行匹配后,获得匹配结果。

进一步的,如图6所示,所述编码单元52包括:

确定子单元521,用于确定所述模式串的长度;

第一处理子单元522,用于当所述模式串的长度大于或者等于3时,将所述模式串按照Base64编码规则编码时使用的字符个数进行切分,获得至少一个模式子串;

第一编码子单元523,用于根据所述Base64编码规则对所述处理子单元522处理后的所述模式子串进行编码;

第二编码子单元524,用于当所述模式串的长度为1时,将所述模式串作为编码时分别对应的第一个字符、第二个字符及第三个字符,并根据所述Base64编码规则对所述模式串进行编码。

进一步的,所述第一处理子单元522,还用于将所述模式串的末尾部分作为切分所述模式串的起点,并按所述模式串的倒序顺序对所述模式串进行切分,得到至少一个包含三个字符的模式子串;

其中,所述模式子串中字符的排列顺序与所述模式串中的正序排列的顺序相同,且所述模式子串中的三个字符分别为第一个字符、第二个字符及第三个字符。

进一步的,如图6所示,所述第一处理子单元522包括:

第一切分模块5221,用于通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第一切分方式用于将所述模式串中的第三个字符作为切分起点;

第一获取模块5222,用于在所述第一切分模块5221通过第一切分方式,按照所述模式串的倒序顺序对所述模式串进行切分后,得到第一模式子串集合;

第二切分模块5223,用于通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第二切分方式用于将所述模式串中的第二个字符作为切分起点,并在所述模式串中的第三个字符后添加两个预设补位符号,组成一个模式子串;

第二获取模块5224,用于在所述第二切分模块5223通过第二切分方式,按照所述模式串的倒序顺序对所述模式串进行切分得到第二模式子串集合;

第三切分模块5225,用于通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分;其中,所述第三切分方式用于将所述模式串中的第一个字符作为切分起点,并在所述模式串中的第二个字符以及第三个字符后添加一个预设补位符号,组成一个模式子串;

第三获取模块5226,用于在所述第三切分模5225通过第三切分方式,按照所述模式串的倒序顺序对所述模式串进行切分之后,得到第三模式子串集合。

进一步的,如图6所示,所述第一编码子单元523包括:

第一编码模块5231,用于对所述第一模式子串集合基于所述Base64编码规则进行编码;

第二编码模块5232,用于对所述第二模式子串集合基于所述Base64编码规则进行编码;

第三编码模块5233,用于对所述第三模式子串集合基于所述Base64编码规则进行编码;

其中,包含三个字符的模式子串在编码后转换为包含四个字符的编码后的模式串,编码后的模式子串中的四个字符分别为编码后的第一个字符、编码后的第二个字符、编码后的第三个字符及编码后的第四个字符。

进一步的,如图6所示,所述匹配单元53包括:

划分子单元531,用于将编码后的第一模式子串集合划分为第一当前匹配部分及第一待匹配部分、将编码后的第二模式子串集合划分为第二当前匹配部分及第二待匹配部分及将编码后的第三模式子串集合划分为第三当前匹配部分及第三待匹配部分;其中,当当前匹配部分与所述目标串匹配成功后,将所述待匹配部分与所述目标串进行匹配;

确定子单元532,用于分别确定所述划分子单元531划分的所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分的匹配起点;其中,当前匹配部分包含一个匹配起点及一个匹配结束点,且所述匹配起点为切分起点;待匹配部分为与所述匹配结束点相邻的字符至所述第一模式子串集合对应的编码后的第一个字符;

匹配子单元533,用于根据预设字符串后缀匹配算法,从所述第一当前匹配部分、所述第二当前匹配部分及所述第三当前匹配部分分别对应的匹配起点开始与所述目标串并行执行匹配。

进一步的,如图6所示,所述匹配子单元533包括:

第一确定模块5331,用于分别确定第一模式子串集合、第二模式子串集合及第三模式子串集合中字符串的字符串长度信息;

第二确定模块5332,用于根据所述第一确定模块5331确定的所述字符串长度信息确定所述匹配起点对应所述目标串的第一当前匹配位置;

判断模块5333,用于判断所述匹配起点对应的编码后的字符与所述第二确定模块5332确定的所述目标串中第一当前匹配位置对应的字符是否一致;

跳跃模块5334,用于当所述判断模块5333确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符不一致时,根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃,直到匹配完所述目标串中的所有字符;

处理模块5335,用于当所述判断模块5333确定所述匹配起点对应的编码后的字符与所述目标串中第一当前匹配位置对应的字符一致时,根据预设字符串后缀匹配算法继续顺序匹配当前匹配部分的其他字符,直到匹配完成匹配结束点对应编码后的字符,并继续匹配所述待匹配部分对应的编码后的字符。

进一步的,如图6所示,所述匹配模块533还包括:

第三确定模块5336,用于在所述跳跃模块5334根据所述预设字符串后缀匹配算法在所述目标串上进行跳跃之后,确定所述匹配起点对应所述目标串的第二当前匹配位置;

获取模块5337,用于获取所述第三确定模块5336确定的所述第二当前匹配位置在所述目标串中的位数;

运算模块5338,用于将所述获取模块5337获取的第二当前匹配位置在所述目标串中的位数与4进行求余运算;

第一匹配模块5339,用于当所述运算模块5338计算的求余运算结果为零时,根据所述预设字符串后缀匹配算法执行所述匹配起点对应的编码后的字符与所述目标串中第二当前匹配位置对应的字符的匹配;

所述跳跃模块5334,还用于当求余运算结果不为零时,在所述目标串上增加跳跃距离,直到增加的跳跃距离对应的当前匹配位置在所述目标串中的位数与4进行求余运算,所得到的求余运算结果为零。

进一步的,如图6所示,所述匹配模块533还包括:

第四确定模块53310,用于当所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配成功时,确定所述模式串与所述目标串匹配成功;

第五确定模块53311,用于当所述第一模式子串集合中所述待匹配部分的字符与所述目标串匹配失败时,确定所述模式串与所述目标串匹配失败;

第二匹配模块53312,用于当所述第二模式子串集合及所述第三模式子串集合中所述待匹配部分的字符与所述目标串匹配成功时,将第二模式子串集合及第三模式子串集合中的剩余部分分别与所述目标串进行匹配;所述剩余部分为所述第二模式子串集合及所述第三模式子串集合中,除当前匹配部分及待匹配部分外的字符;

第六确定模块53313,用于当所述第二匹配模块53312匹配所述第二模式子串集合和/或第三模式子串集合中的剩余部分分别与所述目标串匹配成功时,确定所述模式串与所述目标串匹配成功;

第七确定模块53314,用于当所述第二匹配模块53312匹配所述第二模式子串集合和/或第三模式子串集合中的剩余部分分别与所述目标串匹配失败时,确定所述模式串与所述目标串匹配失败。

进一步的,如图6所示,所述第二编码子单元524包括:

第一编码模块5241,用于通过第一编码方式按照所述Base64编码规则对所述模式串进行编码;所述第一编码方式为将所述模式串作为所述Base64编码规则编码时对应的第一个字符,所述第一编码字符中包含所述模式串中的前六位,所述第二编码字符中包含所述模式串中的后两位;

第一获取模块5242,用于在所述第一编码模块5241通过第一编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第一编码字符及第二编码字符;

第二编码模块5243,用于通过第二编码方式按照所述Base64编码规则对所述模式串进行编码;所述第二编码方式为将所述模式串作为所述Base64编码规则编码时对应的第二个字符,所述第三编码字符中包含模式串中的前四位,所述第四编码字符中包含所述模式串中的后四位;

第二获取模块5244,用于在所述第二编码模块5243通过第二编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第三编码字符及第四编码字符;

第三编码模块5245,用于通过第三编码方式按照所述Base64编码规则对所述模式串进行编码;所述第三编码方式为将所述模式串作为所述Base64编码规则编码时对应的第三个字符,所述第五编码字符包含所述模式串中的前两位,所述第六编码字符包含所述模式串中的后六位;

第三获取模块5246,用于在所述第三编码模块5245通过第三编码方式按照所述Base64编码规则对所述模式串进行编码之后,得到第五编码字符串及第六编码字符。

进一步的,当所述模式串采用第一编码方式进行编码时,所述匹配单元54包括:

第一确定子单元,用于确定所述第一编码字符对应所述目标串中的第四当前匹配位置,并确定所述第二编码字符对应所述目标串中第五当前匹配位置;

第一获取子单元,用于获取所述第一确定子单元确定的所述第四当前匹配位置在所述目标串中位数;

第一计算子单元,用于计算所述第一获取子单元获取的所述第四当前匹配位置在所述目标串中位数与4的余数;

第一匹配子单元,用于当确定所述第一计算子单元的求余结果为1时,将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配;

第一处理子单元,用于当确定所述第一计算子单元的求余结果不为1时,继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

进一步的,所述匹配单元56还包括:

第一判断子单元,用于在所述匹配子单元将所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符进行匹配之后,判断所述第一编码字符与所述目标串中的第四当前匹配位置对应的字符是否匹配成功;

第二处理子单元,用于当所述第一判断子单元确定匹配不成功时,根据所述目标串的顺序执行匹配操作;

第一解码子单元,用于当所述第一判断子单元确定匹配成功时,对所述第二编码字符进行解码,获得包含六位的二进制字符串,并对所述第五当前匹配位置对应的字符进行解码;

第二匹配子单元,用于将所述第一解码子单元解码后的第二编码字符中的第三位、第四位、与解码后的第五当前匹配位置对应字符的第三位、第四位进行匹配。

进一步的,当所述模式串采用第二编码方式进行编码时,所述匹配单元56包括:

第二确定子单元,用于确定所述第三编码字符对应所述目标串中的第六当前匹配位置,并确定所述第四编码字符对应所述目标串中第七当前匹配位置;

第二获取子单元,用于获取所述第二确定子单元确定的所述第七当前匹配位置在所述目标串中位数;

第二计算子单元,用于计算所述第二获取子单元获取的所述第七当前匹配位置在所述目标串中位数与4的余数;

第二解码子单元,用于当所述第二计算子单元确定求余结果为2时,对所述第三编码字符进行解码,获得包含六位的二进制字符串,并对所述第六当前匹配位置对应的字符进行解码;

第三匹配子单元,用于将所述第二解码子单元解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配;

第三处理子单元,用于当所述第二计算子单元确定求余结果不为2,继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

进一步的,所述第二匹配单56元还包括:

第三确定子单元,用于在所述第三匹配子单元将解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位进行匹配之后,确定解码后的第三编码字符中的后四位,与解码后的第六当前匹配位置对应字符的后四位是否匹配成功;

第四处理子单元,用于当所述第三确定子单元确定匹配失败时,根据所述目标串的顺序执行匹配操作;

第三解码子单元,用于当所述第三确定子单元确定匹配成功时,对所述第四编码字符进行解码,获得包含六位的二进制字符串,并对所述第七当前匹配位置对应的字符进行解码;

第四匹配子单元,用于将所述第三解码子单元解码后的第四编码字符中的前六位、与解码后的第七当前匹配位置对应字符的前六位进行匹配。

进一步的,当所述模式串采用第三编码方式进行编码时,所述匹配单元56包括:

第三确定子单元,用于确定所述第五编码字符对应所述目标串中的第八当前匹配位置,并确定所述第六编码字符对应所述目标串中第九当前匹配位置;

第二获取子单元,用于获取所述第九当前匹配位置在所述目标串中位数;

第三计算子单元,用于计算所述第二获取子单元获取的所述第九当前匹配位置在所述目标串中位数与4的余数;

第五匹配子单元,用于当所述第三计算子单元确定求余结果为0时,将所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符进行匹配;

第五处理子单元,用于当所述第三计算子单元确定求余结果不为0时,继续匹配所述目标串中的其他字符,直到匹配完所述目标串中的所有字符。

进一步的,所述匹配单元56还包括:

第二判断子单元,用于在所述第五匹配子单元将所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符进行匹配之后,判断所述第六编码字符与所述目标串中的第九当前匹配位置对应的字符是否匹配成功;

第六处理子单元,用于当所述第二判断子单元确定匹配失败时,根据所述目标串的顺序执行匹配操作;

第四解码子单元,用于当所述第二判断子单元确定匹配成功时,对所述第五编码字符进行解码,获得包含六位的二进制字符串,并对所述第八当前匹配位置对应的字符进行解码;

第六匹配子单元,用于将所述第四解码子单元解码后的第五编码字符中的后两位、与解码后的第八当前匹配位置对应字符的后两位进行匹配。

进一步的,如图6所示,所述编码单元62还包括:

第三编码子单元525,用于当模式串的长度为2时,根据所述Base64编码规则对所述模式串中包含的第一个字符及第二个字符进行编码;

所述匹配单元53,还用于将所述编码单元52编码后的第一个字符与所述目标串进行匹配,待编码后的第一个字符与所述目标串匹配成功后,将编码后的第二个字符与所述目标串进行匹配。

本发明实施例提供的数据的匹配装置,获取模式串,并将模式串按照Base64编码规则进行编码;将编码后的模式串与目标串进行匹配,获得匹配结果;与现有技术相比,本发明实施例在数据匹配时,将模式串进行编码,并与同样编码的目标串进行匹配,无需将编码后的目标串进行解码,既能够节省所占用的巨大存储空间,又能大大减少解码所需的计算量。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1