CN104750725B - 一种基于非确定有限自动机的字符串搜索方法及其装置 - Google Patents
一种基于非确定有限自动机的字符串搜索方法及其装置 Download PDFInfo
- Publication number
- CN104750725B CN104750725B CN201310744154.7A CN201310744154A CN104750725B CN 104750725 B CN104750725 B CN 104750725B CN 201310744154 A CN201310744154 A CN 201310744154A CN 104750725 B CN104750725 B CN 104750725B
- Authority
- CN
- China
- Prior art keywords
- character
- matching
- state variable
- digraph
- match
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于非确定有限自动机的字符串搜索方法,包括构造非确定有限自动机并为非确定有限自动机设定状态变量;在所述非确定有限自动机中载入匹配表达式,并按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图;根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;若所述字符匹配成功则根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;当所述匹配完成时,并将所述状态变量置为开始位置。通过本发明可实现更加准确的字符串搜索,本发明还提供一种基于非确定有限自动机的字符串搜索装置。
Description
技术领域
本发明数据搜索领域,具体地涉及一种基于非确定有限自动机的字符串搜索技术。
背景技术
在于网元进行交互的过程中,程序需要根据网元报文中的一些特定标识(即特定的字符串)确定自身行为。由于网络传输的随机性,这些字符串可能以多种方式被接收,这就需要能够在网络传输层面上屏蔽接收方式的多样性,获得这些特定字符串,发送给上层业务逻辑。
传统基于缓存的字符串搜索,是以一个固定长度的字符串数组作为接受缓存,在该接收缓存中搜索是否存在特定的字符串,若存在则匹配成功,若不存在则将一个时间段内新接受的报文加入接受缓存重新进行匹配,若新报文的长度超过了预设值,则从头部开始截去超出部分进行匹配。这样做的明显不足在于:一、特定字符串中有字符位于超出部分被截去,而本次匹配不成功,从截后的报文头部继续进行匹配,而截后的报文头部并不包含完整的字符串,因此造成不能搜索到匹配的字符串。二、特定字符串位于报文的尾部,需要进行多次搜索匹配才能够匹配到目标字符串,效率很低。
NFA(基于非确定有限自动机)字符串搜索的核心思想是用字符串中的字符依次作为自动机的输入,驱动自动机进行状态转换,如果自动机达到了最终状态,表示匹配成功,如果自动机在字符串输入过程中进入“无法转移”状态,表示匹配失败。因此NFA判断是否发现目标取决于新接收的报文内容和NFA的状态,因此和准确效率比传统算法要好。
但是,由于网络环境中报文是分段到达,不可能一次提供,如果目标字符串的一部分到达,经过NFA没有匹配成功,经过一段时间后,目标字符串的另 一部分到达,这时NFA会重新对报文进行匹配,造成字符串匹配失败,无法获得目标字符串。
综上所述,一种简便高效准确的通过NFA搜索字符串的方法亟待出现。
发明内容
本发明提供了一种基于非确定有限自动机的字符串搜索方法,其特征在于,所述方法包括:
构造非确定有限自动机并为非确定有限自动机设定状态变量;
在所述非确定有限自动机中载入匹配表达式,并按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图;
根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;
若所述字符匹配成功则根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;
当所述匹配完成时,并将所述状态变量置为开始位置。
优选的,所述在非确定有限自动机中载入匹配表达式的方法具体为:
以数组构造所述非确定有限自动机,将所述匹配表达式中的每个字符依次载入所述数组中的每个位置。
详细的,所述根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配的方法具体为:
确定非确定有限自动机中与所述状态变量中的状态位置相应的位置为字符匹配起始的位置,若所述状态变量为开始位置,则从所述非确定有限自动机中的第一个位置开始匹配;
在所述确定匹配起始的位置载入所述字符,与该位置存储的匹配表达式中的字符进行匹配。
详细的,所述并根据所述有向图中该位置所指向的最终位置更新所述状态变量的方法为:
根据所述有向图中该位置所指向的位置进行转换,到达下次匹配转换位置时,将所述到达的匹配转换位置记为最终位置更新所述状态变量;
所述有向图中通过匹配普通字符而完成的状态转换为匹配转换;
所述有向图中通过元字符完成的转换为空转换。
详细的,所述按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图的方法为:
将所述匹配表达式中的字符依次作为有向图中的各节点;
将所述匹配表达式根据所述有向图运算符转换规则确定所述有向图中各节点的转换关系。
详细的,所述有向图运算符转换规则具体为:
所述匹配表达式中的“(”和“)”元字符为指向下一个节点的空转换;
所述匹配表达式中的“*”元字符为指向上一个节点的循环并指向下一个节点的空转换;
所述匹配表达式中的“|”元字符为跳跃的指向“)”的空转换,“(”节点跳跃的指向“|”后的下一个节点;
所述匹配表达式中的普通字符为指向下一个节点的匹配转换。
详细的,确定所述获得符合所述匹配表达式的字符串的方法为:
当所述匹配进入所述有向图中最后一个状态位置时,获得符合所述匹配表达式的字符串。
本发明还公开一种基于非确定有限自动机的字符串搜索装置,所述装置包括:
自动机单元,用于构造并存储非确定有限自动机并为非确定有限自动机设定状态变量,根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;若所述字符匹配成功根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;
表达式载入单元,用于向所述自动机单元构造的非确定有限自动机载入匹配表达式;
匹配结果输出单元,用于输出所述自动机单元的匹配结果。
具体的,所述自动机单元进一步包括:
自动机创建存储模块,用于以数组构造非确定有限自动机,保存所述数据载入转换单元载入数组的匹配表达式;
有向图转化模块,用于按照有向图运算符转换规则将所述自动机创建存储 模块构造的非确定有限自动机中的匹配表达式转化为有向图;
状态变量存储模块,用于存储所述非确定有限自动机的状态变量,所述状态变量记载字符串匹配的状态位置;
匹配模块,用于根据所述状态变量存储模块中状态变量记载的状态位置,对进入所述自动机创建存储模块的字符串中的字符开始匹配;若所述字符匹配成功则根据所述有向图转换模块转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
具体的,所述匹配模块进一步包括:
匹配起点确定模块,用于根据所述状态变量存储模块中状态变量记载的状态位置,确定匹配的起点位置;
若所述状态变量存储模块中的状态变量为开始位置,则从所述自动机创建存储模块中非确定有限自动机数组的第一个位置开始匹配,若所述状态变量不为开始位置,则在非确定有限自动机数组中按照所述位置变量记载的状态位置开始匹配;
字符匹配模块,用于根据匹配起点确定模块确定的起点位置,对进入所述自动机创建存储模块的字符串中的字符进行匹配;若所述字符匹配成功则根据所述有向图转换模块转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;
状态变量置始模块,用于当字符匹配模块匹配完成时,将所述状态变量存储模块中的状态变量置为开始位置。
本发明通过对NFA设定状态变量,记载NFA的搜索状态,若此变量为开始位置,执行标准的NFA算法,NFA中的第一个位置开始进行字符串匹配,若状态变量不为开始位置,当开始搜索时,从变量中记载的状态位置开始进行NFA搜索,当目标字符串一部分到达,经过NFA匹配时记录匹配的状态位置,在经过一段时间后,目标字符串的另一部分到达,之前的匹配记录并没有丢失,可根据记录的状态位置开始进行目标字符串另一部分的匹配,这就解决了多段报文的匹配问题,不论搜索目标有多长,都可以匹配成功。实现了简便高效准确的字符串搜索。
附图说明
图1为本发明实施例一一种基于非确定有限自动机的字符串搜索方法流程图;
图2为本发明实施例二说明如何将非确定有限自动机中的匹配表达式转换成有向图的方法流程图;
图3为本发明实施例三方法的流程图;
图4为本发明实施例四结合实例说明如何进行字符匹配的方法流程图;
图5为本发明实施例四中转换为有向图的示意图;
图6至图12为本发明实施例四中各匹配步骤的示意图;
图13为本发明实施例五一中基于非确定有限自动机的字符串搜索装置的结构示意图。
具体实施方式
以下将配合图式及实施例来详细说明本发明的实施方式,藉此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
如图1所示,本发明实施例一公开一种基于非确定有限自动机的字符串搜索方法,包括以下步骤:
步骤S101:构造非确定有限自动机并为非确定有限自动机设定状态变量。
以数组构造所述非确定有限自动机(NFA),将所述匹配表达式中的每个字符依次载入所述数组中的每个位置。
步骤S102:在所述非确定有限自动机中载入匹配表达式,并按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图。
将匹配表达式中的每个字符装载如非确定有限自动机数组中的每个位置,将每个位置作为一个节点,将匹配表达式中的逻辑关系作为各节点的链接关系,将匹配表达式转换成有向图。
步骤S103:根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配。
确定非确定有限自动机中与所述状态变量中的状态位置相应的位置为字符匹配起始的位置,若所述状态变量为开始位置,则从所述非确定有限自动机中 的第一个位置开始匹配;在所述确定匹配起始的位置载入所述字符,与该位置中存储表达式中的字符进行匹配。
当非确定有限自动机在进行匹配之前,先读取状态变量中的状态位置,这里分为两种情况:
1、上一次字符串匹配没进行完成,只成功匹配了目标字符串中的一部分字符,因此状态变量中的状态位置,为上次匹配成功时的状态位置,在新的字符串进入非确定有限自动机时,确定上次匹配成功的状态位置为本次字符匹配起始的位置,开始对新的字符串进行匹配。
2、上一次字符串匹配已完成,由于完成时将状态变量中的状态位置置为开始位置,则对新的字符串匹配应从非确定有限自动机中的第一个位置开始进行字符匹配。
状态变量中的状态位置标识着上一次对报文中字符串的匹配成功后NFA的状态位置,从该位置对进入NFA的下一个报文字符串中的字符进行匹配,这样就避免了报文传输时间差而导致无法匹配出目标字符串的缺陷。
步骤S104:若所述字符匹配成功则根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的状态位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
根据所述有向图中该位置所指向的位置进行转换,到达下次匹配转换位置时,将所述到达的匹配转换位置记为最终位置更新所述状态变量。
所述有向图中通过匹配普通字符而完成的状态转换为匹配转换。
所述有向图中通过元字符完成的转换为空转换。
若当前字符匹配成功,则NFA根据有向图中的指向进行状态转换,直到有向图中下一次需要匹配的字符出现,则记录该位置为最终位置,将最终位置更新至状态变量,此时的NFA对之前的字符串匹配成功期待后面的字符匹配,因此从更新的状态变量中的状态位置开始对下一字符进行匹配。
有两种状态可确定为完成匹配,一为当符合匹配表达式中的字符串已经全部匹配出来,则完成匹配,准备进行新的匹配;二为匹配表达式中有字符匹配失败,则证明没有找到目标字符串,也可以确定为完成匹配,准备进行新的匹配。
如果匹配没有完成则需要在状态变量中记录当前状态位置,根据当前状态 位置对进入的字符继续匹配。
当所述匹配进入所述有向图中最后一个状态位置时,可确定获得符合所述匹配表达式的字符串。
步骤S105:当所述匹配完成时,并将所述状态变量置为开始位置。
匹配完成时,将状态变量置为开始位置,当新的报文进入NFA时,从第一个状态位置开始匹配。
通过设定状态变量,将NFA匹配的状态位置随时记录下来,当字符串进入NFA有时间间隔时,仍然记录上一次匹配成功的状态位置,等待下一段字符串进入后继续进行匹配,这样可以明显的提高效率和准确率。
需要说明的是,可通过不同的方式设置开始位置,只要标识出从NFA数组的第一个位置开始进行匹配即可。
为了更好的说明本发明的实现方法,基于本发明的实施例一特给出实施例二,如图2所示,用以说明如何将非确定有限自动机中的匹配表达式转换成有向图。
非确定有限自动机(NFA)状态之间的转换有两种情况,一种是“匹配转换”,表示由于输入的普通字符(匹配表达式中的字母)符合NFA的一条转换规则引发的状态转换;另一种叫“空转换”,是元字符(匹配表达式中除字母外的其他字符,如括号、星号、竖线等)间的转换,每一个字符都有且仅有一条“指出”的匹配转换,每一个元字符都至少有一条“指出”的空转换。
步骤S201:将所述匹配表达式中的字符依次作为有向图中的各节点。
匹配表达式中的每个字符依次作为有向图中的各节点,各节点在非确定有限自动机数据中的下标为各节点所在的状态位置。
步骤S202:将所述匹配表达式根据所述有向图运算符转换规则确定所述有向图中各节点的转换关系。
有向图运算符转换规则,是将匹配表达式中用到的运算符转换为有向图中的节点间转换关系的依据。
有向图运算符转换规则包括:
所述匹配表达式中的“(”和“)”元字符为指向下一个节点的空转换;
所述匹配表达式中的“*”元字符为指向上一个节点的循环并指向下一个节点的空转换;
所述匹配表达式中的“|”元字符为跳跃的指向“)”的空转换,“(”节点跳跃的指 向“|”后的下一个节点;
所述匹配表达式中的普通字符为指向下一个节点的匹配转换。
为了详细的说明基于NFA字符串搜索的整个过程,基于本发明的实施例一、实施例二给出本发明的实施例三,如图3所示。
步骤S301:以数据构造非确定有限自动机并为非确定有限自动机设定状态变量。
步骤S302:在所述非确定有限自动机中载入匹配表达式,并按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图。
步骤S303:根据非确定有限自动机状态变量记载的状态位置,确定本次字符匹配起始的位置。
若所述状态变量为开始位置,则从所述非确定有限自动机中的第一个位置开始匹配。
若所述状态变量不是开始位置,则从非确定有限自动机中与状态变量中的状态位置相应的位置开始进行字符匹配。
步骤S304:在所述确定匹配起始的位置载入字符,与该位置存储的匹配表达式中的字符进行匹配,若匹配成功则进入步骤S305,若匹配不成功则进入步骤S307。
步骤S305:根据有向图中该位置所指向的位置进行转换,到达下次匹配转换位置时,将所述到达的匹配转换位置记为最终位置更新所述状态变量。
步骤S306:判断是否完成匹配表达式中目标字符串的匹配,若是则进入步骤S307,若不是则进入步骤S304。
判断是否完成匹配表达式中目标字符串的匹配,可以通过判断是否到达非确定有限自动机数组的最后一个位置来确定。当到达非确定有限自动机数组的最后一个位置可认为匹配成功且匹配完成。
步骤S307:确定本次匹配完成,将非确定有限自动机的状态变量置为开始位置。
为了更好的说明非确定有限自动机通过有向图进行匹配的过程,下面结合实例给出本发明的实施例四,如图4所示。
搜索目标是匹配表达式“((A*B|A C)D)”的字符串,它对应的自然语言描述是:所有符合下面规则的字符串
1)由两部分组成:第一部分必须符合规则2),第二部分是一个字符“D”;
2)以下两种情况任选其一:
a)开头是0或任意个A,后面跟一个B,
b)“AC”
所以BD、ABD、AABD、AAABD、ACD都是符合要求的,ABCD不符合要求。
输入两段报文是“AAB”和“DCE”
整个过程分为两步:首先构造NFA载入匹配表达式,第二步执行搜索。
步骤S401:构建NFA数组载入匹配表达式,取状态变量为开始状态。
构建的NFA数组如下表1所述,从左边括号开始,匹配表达式中的每一个字符代表一个位置状态,其名称是它的数组下标:
表1构建NFA数组
运算符 | ( | ( | A | * | B | | | A | C | ) | D | ) |
状态位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
步骤S402:将构造的NFA数组转化为有向图。
上面每一个字符就是有向图中的一个节点,现在我们添加边,状态之间的转换有两种情况,一种是“匹配转换”,表示由于输入的普通字符(字母)符合NFA的一条转换规则引发的状态转换;另一种叫“空转换”,是元字符(除字母外的其他字符,如括号,星号等)间的转换,每一个字符都有且仅有一条“指出”的匹配转换,每一个元字符都至少有一条“指出”的空转换。按照上文中的运算符转换规则构造有向图,如图5所示。
步骤S403:读取状态变量,由于状态变量记载的开始位置,从0状态位置开始接收字符A进行字符匹配,匹配完成后的位置状态包括:2、4、7,位置状态更新至状态变量。
第一步匹配如图6所示,0位置是“(”,空转换至1位置,1位置是“(”,仍为空转换,空转换到2位置和6,此时分为两条线路,如图7所示:
线路一:2位置为字符“A”,匹配成功,匹配转换至3位置,3位置为“*”空转换至2位置和4位置;
线路二:6位置为字符“A”,匹配成功,匹配转换至7位置;
记录2、4、7为第一次匹配所指向的最终位置,将状态变量中状态位置更新为2、4、7。
步骤S404:接收第二个字符A,读取状态变量中的状态位置2、4、7,进 行匹配,匹配完成后的状态位置为2、4,位置状态更新至状态变量。
位置2为字符“A”,匹配成功,通过匹配转换到达位置3,如图8所示。
位置3通过空转换到达位置2和位置4,如图9所示。
步骤S405:接收第三个字符B,读取状态变量中的状态位置2、4,进行匹配,匹配完成后的状态位置为9,更新状态位置至状态变量,如图10所示。
线路一:位置2中为字符“A”,不匹配,不能完成匹配转换;
线路二:位置4中为字符“B”,匹配通过,匹配转换至位置5;
如图11所示,位置5为“|”,通过空转换到达位置8,位置8为“)”,通过空转换到达位置9。
步骤S406:判断是否完成目标字符串的匹配,未完成匹配则进入步骤S407。
此时第一段字符串已进入并匹配完毕,由于未进入有向图中最后一个位置,也没有字符匹配失败,因此保持状态变量中的位置状态,等待一定时间差后第二段字符串进入NFA。
步骤S407:接收第二个字符串中的第一个字符D,读取状态变量中的状态位置9,进行匹配,匹配出目标字符串AABD,匹配完成,将状态变量置为开始状态。
位置9中为字符“D”,通过匹配,匹配转换至位置10,位置11为空,因此到达10即到达匹配数组的最后一个位置,匹配完成。
匹配成功,在两个输入字符串“AAB”“DCE”中找到了符合“((A*B|A C)D)”要求的字符串。
基于上述方法,本发明实施例五还公开一种基于非确定有限自动机的字符串搜索装置,如图13所示,所述装置包括:
自动机单元1,用于构造并存储非确定有限自动机并为非确定有限自动机设定状态变量,根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;若所述字符匹配成功根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
自动机单元1进一步包括:
自动机创建存储模块11,用于以数组构造非确定有限自动机,保存所述数据载入转换单元载入数组的匹配表达式。
有向图转化模块12,用于按照有向图运算符转换规则将所述自动机创建存储模块11构造的非确定有限自动机中的匹配表达式转化为有向图。
有向图运算符转换规则具体为:
所述匹配表达式中的“(”和“)”元字符为指向下一个节点的空转换;
所述匹配表达式中的“*”元字符为指向上一个节点的循环并指向下一个节点的空转换;
所述匹配表达式中的“|”元字符为跳跃的指向“)”的空转换,“(”节点跳跃的指向“|”后的下一个节点;
所述匹配表达式中的普通字符为指向下一个节点的匹配转换。
状态变量存储模块13,用于存储所述非确定有限自动机的状态变量,所述状态变量记载字符串匹配的状态位置。
匹配模块14,用于根据所述状态变量存储模块13中状态变量记载的状态位置,对进入所述自动机创建存储模块11的字符串中的字符开始匹配;若所述字符匹配成功则根据所述有向图转换模块12转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块13中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
匹配模块14进一步包括:
匹配起点确定模块141,用于根据所述状态变量存储模块13中状态变量记载的状态位置,确定匹配的起点位置。
若所述状态变量存储模块中的状态变量为开始位置,则从所述自动机创建存储模块中非确定有限自动机数组的第一个位置开始匹配,若所述状态变量不为开始位置,则在非确定有限自动机数组中按照所述位置变量记载的状态位置开始匹配。
字符匹配模块142,用于根据匹配起点确定模块141确定的起点位置,对进入所述自动机创建存储模块11的字符串中的字符进行匹配;若所述字符匹配成功则根据所述有向图转换模块转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
状态变量置始模块143,用于当字符匹配模块匹配142完成时,将所述状态 变量存储模块13中的状态变量置为开始位置。
表达式载入转换单元2,用于向所述自动机单元1构造的非确定有限自动机载入匹配表达式。
匹配结果输出单元3,用于输出所述自动机单元1的匹配结果。
本实施例所述的装置的工作原理为:
自动机创建存储模块11创建数组,存储表达式载入单元载入的表达式;有向图转换模块12根据有向图运算符转换规则,将载入自动机存储模块11中数组的表达式转换成有向图;状态变量存储模块13存储当前自动机创建存储模块11中数组的状态位置,未经匹配的状态变量置为开始位置,即从数组第一位也就是有向图中的第一个节点进行匹配;当字符进入自动机字符匹配模块142时,匹配起点确定模块141根据状态变量存储模块13中存储的状态位置确定匹配起始状态位置,字符串匹配模块142根据所述匹配起点确定单元141确定起始状态位置对依次进入的字符进行匹配,匹配的过程参见上文方法描述的相应部分,每个字符匹配完成后,将匹配后的状态位置更新至状态变量存储模块13,当整个字符串匹配成功或有字符匹配失败时,通过状态变量置始模块143,将状态变量存储模块13中的状态变量置为开始状态。
当字符匹配进入所述有向图中的最后一个节点即NFA数组的最后一个状态位置时,确定字符串匹配成功。
本方法中各步骤的详细实现过程,可参见上文中的装置部分描述,因此不再赘述。
虽然本发明所揭露的实施方式如上,然而所述的内容并非用以直接限定本发明的保护范围。任何本发明所属技术领域中技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作些许的更动。本发明的保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (10)
1.一种基于非确定有限自动机的字符串搜索方法,其特征在于,所述方法包括:
构造非确定有限自动机并为非确定有限自动机设定状态变量;
在所述非确定有限自动机中载入匹配表达式,按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图;
根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;
若所述字符匹配成功则根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;
当所述匹配完成时,将所述状态变量置为开始位置。
2.根据权利要求1所述的方法,其特征在于,所述在非确定有限自动机中载入匹配表达式的方法具体为:
以数组构造所述非确定有限自动机,将所述匹配表达式中的每个字符依次载入所述数组中的每个位置。
3.根据权利要求2所述的方法,其特征在于,所述根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配的步骤具体为:
确定非确定有限自动机中与所述状态变量中的状态位置相应的位置为字符匹配起始的位置,若所述状态变量为开始位置,则从所述非确定有限自动机中的第一个位置开始匹配;
在所述确定匹配起始的位置载入所述字符,与该位置存储的匹配表达式中的字符进行匹配。
4.根据权利要求3所述的方法,其特征在于,所述根据所述有向图中该位置所指向的最终位置更新所述状态变量的方法为:
根据所述有向图中该位置所指向的位置进行转换,到达下次匹配转换位置时,将所述到达的匹配转换位置记为最终位置更新所述状态变量;
所述有向图中通过匹配普通字符而完成的状态转换为匹配转换;
所述有向图中通过元字符完成的转换为空转换。
5.根据权利要求4所述的方法,其特征在于,所述按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图的步骤为:
将所述匹配表达式中的字符依次作为有向图中的各节点;
将所述匹配表达式根据所述有向图运算符转换规则确定所述有向图中各节点的转换关系。
6.根据权利要求5所述的方法,其特征在于,所述有向图运算符转换规则具体为:
所述匹配表达式中的“(”和“)”元字符为指向下一个节点的空转换;
所述匹配表达式中的“*”元字符为指向上一个节点的循环并指向下一个节点的空转换;
所述匹配表达式中的“|”元字符为跳跃的指向“)”结束的空转换,“(”开始的节点跳跃的指向“或”后的下一个节点;
所述匹配表达式中的普通字符为指向下一个节点的匹配转换。
7.根据权利要求6所述的方法,其特征在于,确定所述获得符合所述匹配表达式的字符串的方法为:
当所述匹配进入所述有向图中最后一个状态位置时,获得符合所述匹配表达式的字符串。
8.一种基于非确定有限自动机的字符串搜索装置,其特征在于,所述装置包括:
自动机单元,用于构造并存储非确定有限自动机并为非确定有限自动机设定状态变量,根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;若所述字符匹配成功根据有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合匹配表达式的字符串或有字符匹配失败则匹配完成;
表达式载入单元,用于向所述自动机单元构造的非确定有限自动机载入匹配表达式;
匹配结果输出单元,用于输出所述自动机单元的匹配结果。
9.根据权利要求8所述的装置,其特征在于,所述自动机单元进一步包括:
自动机创建存储模块,用于以数组构造非确定有限自动机,保存数据载入转换单元载入数组的匹配表达式;
有向图转化模块,用于按照有向图运算符转换规则将所述自动机创建存储模块构造的非确定有限自动机中的匹配表达式转化为有向图;
状态变量存储模块,用于存储所述非确定有限自动机的状态变量,所述状态变量记载字符串匹配的状态位置;
匹配模块,用于根据所述状态变量存储模块中状态变量记载的状态位置,对进入所述自动机创建存储模块的字符串中的字符开始匹配;若所述字符匹配成功则根据所述有向图转换模块转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成。
10.根据权利要求9所述的装置,其特征在于,所述匹配模块进一步包括:匹配起点确定模块,用于根据所述状态变量存储模块中状态变量记载的状态位置,确定匹配的起点位置;
若所述状态变量存储模块中的状态变量为开始位置,则从所述自动机创建存储模块中非确定有限自动机数组的第一个位置开始匹配,若所述状态变量不为开始位置,则在非确定有限自动机数组中按照位置变量记载的状态位置开始匹配;
字符匹配模块,用于根据匹配起点确定模块确定的起点位置,对进入所述自动机创建存储模块的字符串中的字符进行匹配;若所述字符匹配成功则根据所述有向图转换模块转化的有向图中该位置所指向的最终位置更新所述状态变量存储模块中的状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;
状态变量置始模块,用于当字符匹配模块匹配完成时,将所述状态变量存储模块中的状态变量置为开始位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310744154.7A CN104750725B (zh) | 2013-12-30 | 2013-12-30 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310744154.7A CN104750725B (zh) | 2013-12-30 | 2013-12-30 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750725A CN104750725A (zh) | 2015-07-01 |
CN104750725B true CN104750725B (zh) | 2019-10-18 |
Family
ID=53590424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310744154.7A Active CN104750725B (zh) | 2013-12-30 | 2013-12-30 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104750725B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110008385B (zh) * | 2018-04-20 | 2020-12-22 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174261A (zh) * | 2006-11-03 | 2008-05-07 | 北京航空航天大学 | 用于多正则表达式联合搜索的扩展有限状态机及搜索方法 |
EP1986390A2 (en) * | 2007-04-24 | 2008-10-29 | Juniper Networks, Inc. | Parallelized pattern matching using non-deterministic finite automata |
CN101599074A (zh) * | 2009-06-26 | 2009-12-09 | 华为技术有限公司 | 正则表达式匹配的方法及装置 |
CN101841546A (zh) * | 2010-05-17 | 2010-09-22 | 华为技术有限公司 | 一种规则匹配方法、装置及系统 |
-
2013
- 2013-12-30 CN CN201310744154.7A patent/CN104750725B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174261A (zh) * | 2006-11-03 | 2008-05-07 | 北京航空航天大学 | 用于多正则表达式联合搜索的扩展有限状态机及搜索方法 |
EP1986390A2 (en) * | 2007-04-24 | 2008-10-29 | Juniper Networks, Inc. | Parallelized pattern matching using non-deterministic finite automata |
CN101599074A (zh) * | 2009-06-26 | 2009-12-09 | 华为技术有限公司 | 正则表达式匹配的方法及装置 |
CN101841546A (zh) * | 2010-05-17 | 2010-09-22 | 华为技术有限公司 | 一种规则匹配方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104750725A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4856627B2 (ja) | 部分的クエリーキャッシング | |
CN105426408B (zh) | 一种多索引的数据处理方法及装置 | |
CN100576222C (zh) | 检测数据流中的模式的方法和装置 | |
US8073874B2 (en) | Bit string searching apparatus, searching method, and program | |
CN104915383B (zh) | 一种通用数据库访问中自动适配对象的方法 | |
CN106713273B (zh) | 一种基于字典树剪枝搜索的协议关键字识别方法 | |
CN103765381B (zh) | 对b+树的并行操作 | |
CN109582670B (zh) | 一种车辆维修方案的推荐方法及相关设备 | |
CN110096628B (zh) | 一种基于字符串的快速匹配识别方法和装置 | |
CN108279943A (zh) | 索引加载方法和装置 | |
CN109271394B (zh) | 一种基于id缓存的数据批量插入更新实现方法 | |
CN105718307B (zh) | 进程管理方法及进程管理装置 | |
CN103870511B (zh) | 基于共享内存的信息查询设备及方法 | |
CN105447021A (zh) | 用于数据库查询的方法和系统 | |
CN104750725B (zh) | 一种基于非确定有限自动机的字符串搜索方法及其装置 | |
EP2660729A1 (en) | Device and method for storing mass data based on tree structure | |
CN105095457B (zh) | 历史数据存储管理方法 | |
US20170235795A1 (en) | System and method for recursively iterating over a loosely associated data structure | |
CN104008205A (zh) | 一种内容路由的查询方法及系统 | |
CN110309214A (zh) | 一种指令执行方法及其设备、存储介质、服务器 | |
CN101604336B (zh) | 一种从源头进行数据检验、修正的方法和系统 | |
US8166043B2 (en) | Bit strings search apparatus, search method, and program | |
CN103902554B (zh) | 数据访问方法与装置 | |
CN109492020A (zh) | 一种数据缓存方法、装置、电子设备及存储介质 | |
US8195667B2 (en) | Bit string search apparatus, search method, and program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180716 Address after: 300000 Tianjin free trade pilot area (Airport Economic Zone) golf course, North Huijin Plaza, building 2, -602 Applicant after: Tianjin Yiyang Xintong Technology Co., Ltd. Address before: 150090 1 building, hi tech Development Zone, Songshan Road, Nangang District, Harbin, Heilongjiang. Applicant before: Yiyang Xintong Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |