字符串匹配方法和装置的制造方法_3

文档序号:9708289阅读:来源:国知局
303、中央处理器将前缀状态自动机存储在存储器中。
[0082] 具体的,可通过以下方法实现:
[0083] 中央处理器将生成的前缀状态自动机采用稀疏矩阵的方式存储在存储器中,该处 理器可以为内存或全局显存,稀疏矩阵中的第一列表示前缀状态自动机中的各个状态,稀 疏矩阵中的第一行表示前缀状态自动机的各个输入,其中的数字表示在该数字所在行所示 的状态下检测到该数字所在列的输入时,状态跳转的下一跳状态,-1表示在该行所示的状 态下检测到该数字所在列的输入时,有字符串被成功匹配;
[0084] 对于成功匹配到了哪个字符串,则是由另外一个匹配列表进行存储,以上述前缀 状态自动机为例,该列表中包括前缀状态自动机的每一个状态以及与每一个状态对应的地 址,若其中第一状态对应的地址不为空,则表示在该第一状态下有模式字符串的前缀被成 功匹配,该第一状态对应的地址为被成功匹配到的模式字符串的前缀的存储地址。
[0085] 示例性的,如上述前缀状态自动机采用的稀疏矩阵可以表示为下表1所示的内 容:
[0086]
[0088] 表 1
[0089] 前缀状态自动机的匹配列表可以表示为下表2所示的内容:
[0090]
[0091] 表 2
[0092] 图5所示的后缀状态自动机采用的稀疏矩阵可以表示为下表3所示的内容:
[0093]
[0094]
[0095] 表 3
[0096] 图5所示的后缀状态自动机的匹配列表可以表示为下表4所示的内容:
[0097]
[0098] 表 4
[0099] 图6所示的后缀状态自动机采用的稀疏矩阵可以表示为下表5所示的内容:
[0100]

[0101] 表 5
[0102] 图6所示的后缀状态自动机的匹配列表可以表示为下表6所示的内容:
[0103]
[0104] 表 6
[0105] S304、图形处理器获取前缀状态自动机并对待匹配字符串进行匹配。
[0106] 具体的,可通过以下方法实现:
[0107] 图形处理器从上述存储器中获取上述前缀状态自动机,该获取过程可以通过零 拷贝技术从存储器中读取该前缀状态自动机,而后可以从网卡获取待匹配字符串,并可以 将该待匹配字符串进行分段,为每个分段开启一个线程利用多模式字符串匹配算法对待匹 配字符串进行字符串匹配,该匹配所使用的程序若是在OpenCL架构下进行,则可以使用 OpenCL的C语言根据多模式字符串匹配算法的原理编写而成的一段适合图形处理器运行 的程序。
[0108] 示例性的,当图形处理器获取到的待匹配字符串为XXX~XXXABACCCCCXXX~XXX, 假设XXX~XXX为32个字节,图形处理器可以将接收到的待匹配字符串分段可以为从首字 符开始每32+4个字符分为一段,由于上述模式字符串的前缀的长度预设为4个字符,则每 相邻的两段的重叠区域为4个字符,图形处理器从存储器中获取上述如图4所示的前缀状 态自动机,为每一段分配一个线程利用上述前缀状态自动机对待匹配字符串进行字符匹配 上述分段如图7所示,重叠区域表示线程1与线程2处理的待匹配字符串的相同位置的字 符,该匹配过程可以为从上述前缀状态自动机的起始状态开始,由第一个线程从待匹配字 符串的首字符开始逐个字符得输入到该前缀状态自动机中,直到该线程将该分段内的所有 字符都输入到该前缀状态自动机中为止,如表1所示,在起始状态〇时,当前32个字符X进 行输入时都失败跳转到起始状态〇,当输入字符A时前缀状态自动机从状态0跳转到状态 1,当继续输入字符B时,跳转到状态2,继续输入字符A时跳转到状态3,最后输入字符C时, 跳转到状态4,此时,图形处理器从该稀疏矩阵中读取到数值-1,即表示在该状态下有前缀 被成功匹配,而后图形处理器经过查找上述列表2中的匹配链表,从该匹配链表中得到匹 配的字符串的地址,从而通过该地址查找到匹配成功的字符串为ABAC,并生成匹配结果,并 将该匹配结果发送到中央处理器可读取的内存中,该匹配结果表示前缀字符串ABAC被成 功匹配,并且指示该字符串ABAC在待匹配字符串中的位置;
[0109] 图形处理器开启第二个线程从上述待匹配字符串的第33个字符A开始利用上述 前缀状态自动机按照相同方法向后逐个输入32+4个字符,为了防止漏检,第一个线程和第 二个线程所输入的待匹配字符串中相同位置的字符数量为4个,即是前缀字符串的字符长 度,按照上述字符匹配过程,图形处理器开启η个线程对待匹配字符串进行匹配,直到待匹 配字符串中所有字符都被输入到上述前缀状态自动机中。
[0110] 需要说明的是,上述所有线程可以并行工作,即所有线程可以同时利用上述前缀 状态自动机将各自处理的字符输入到该自动机中并生成对应的处理结果。
[0111] S305、中央处理器获取后缀状态自动机并对待匹配字符串进行匹配。
[0112] 具体的,可以通过以下方法实现:
[0113] 当中央处理器从内存中读取图形处理器存储的匹配结果,若判断出有前缀字符串 被成功匹配,则从该内存中查找到匹配成功的前缀在待匹配字符串中的位置,并在待匹配 字符串中被成功匹配的前缀字符串的最后一个字符开始向后开始逐个将待匹配字符串中 的子符输入到后缀状态自动机中。
[0114] 示例性的,当中央处理器从内存中读取到图形处理在待匹配字符串XXX~ XXXABACCCCCXXX~XXX中成功匹配到了前缀字符串ABAC,并且位置为待匹配字符串的第33 个字符到第36个字符,则找到该位置,并从待匹配字符串的第37个字符开始将待匹配字符 串中的字符逐个输入到后缀状态自动机,如表3所示,状态0'表示当前输入字符为C (因为 后缀字符串CCCC和DDD对应的前缀为ABAC,这里可以取前缀的最后一个字符C作为初始状 态…),当输入上述待匹配字符串的第37个字符C时,则从起始状态0'开始,跳转到状 态P,继续输入C时跳转到状态2',再次输入字符C时跳转到状态3',最后再输入字符 C时,跳转到状态4',通过表3可知此时中央处理器读取到数值-1即表示有后缀字符串被 成功匹配,而后中央处理器经过查找上述列表4中的匹配链表,从该匹配链表中得到匹配 的字符串的地址,从而通过该地址查找到匹配成功的字符串为CCCC,而后继续输入字符X, 此时匹配结束跳转到状态0,直到待匹配字符串的最后一个字符被输入到后缀状态自动机 中,此时中央处理器可确定在待匹配字符串中有前缀ABAC和后缀CCCC被成功匹配,即有模 式字符串ABACCCCC在待匹配字符串中被成功匹配;
[0115] 假设当中央处理器从内存中读取到图形处理在待匹配字符串XXX~ XXXWXYZAAAAAXXX~XXX中成功匹配到了前缀字符串WXYZ,并且位置为待匹配字符串的第 33个字符到第36个字符,则找到该位置,并从待匹配字符串的第37个字符开始将待匹配字 符串中的字符逐个输入到后缀状态自动机,如表5所示,状态0"表示当前输入字符为Z (因 为后缀字符串AAAAA对应的前缀为WXYZ,这里可以取前缀的最后一个字符Z作为初始状态 〇〃),当输入上述待匹配字符串的第37个字符A时,则从起始状态0〃开始,跳转到状态1〃, 继续输入A时跳转到状态2",再次输入字符A时跳转到状态3",最后再输入字符A时,跳转 到状态4〃,最后再输入字符A时,跳转到状态5〃,通过表5可知此时中央处理器读取到数 值-1即表示有后缀字符串被成功匹配,而后中央处理器经过查找上述列表6中的匹配链 表,从该匹配链表中得到匹配的字符串的地址,从而通过该地址查找到匹配成功的字符串 为AAAAA,而后继续输入字符X,此时匹配结束跳转到状态0",直到待匹配字符串的最后一 个字符被输入到后缀状态自动机中,此时中央处理器可确定在待匹配字符串中有前缀WXYZ 和后缀AAAAA被成功匹配,即有模式字符串WXYZAAAAA在待匹配字符串中被成功匹配。
[0116] 需要说明的是,中央处理器从内存中读取图形处理器的匹配结果并对待匹配字符 串进行字符匹配的操作可以和图形处理器并行运行。
[0117] 本发明的实施例提供一种字符串匹配方法,首先中央处理器将模式字符串分为前 缀和后缀,并分别生成前缀状态自动机和后缀状态自动机,图形处理器利用前缀状态自动 机对待匹配字符串进行字符串匹配,匹配成功后,由中央处理器利用后缀状态自动机对待 匹配字符串进行第二次字符串匹配,能够使得字符串匹配的效率更高。
[0118] 本发明实施例提供一种字符串匹配装置01,如图8所示,该装置01包括:
[0119] 自动机获取单元011,用于获取前缀状态自动机,前缀状态自动机是由模式字符串 的前缀按照多模式字符串匹配算法构成的状态自动机,模式字符串为字符串匹配时所用的 特征字符串,前缀由从模式字符串第一个字符开始逐个提取预设值个数的字符组合而成;
[0120] 匹配单元012,用于从自动机获取单元011获取前缀状态自动机,获取待匹配字符 串,根据前缀状态自动机对待匹配字符串进行字符串匹配,以便字符串匹配成功后中央处 理器利用模式字符串的后缀对待匹配字符串进行第二次字符串匹配。
[0121] 进一步的,自动机获取单元011具体用于:
[0122] 从存储器中获取前缀状态自动机,前缀状态自动机按照稀疏矩阵的方式存储在存 储器内存中,稀疏矩阵中的行表示前缀状态自动机的各个状态,稀疏矩阵每一列对应一个 输入,稀疏矩阵中的列表示前缀状态自动机接收到每一列对应的输入时状态跳转的下一跳 状态,其中-1表示在该行所示的状态下有字符串被成功
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1