CN101876986B - 基于有限状态自动机的字符串匹配方法及内容过滤设备 - Google Patents
基于有限状态自动机的字符串匹配方法及内容过滤设备 Download PDFInfo
- Publication number
- CN101876986B CN101876986B CN2009102262794A CN200910226279A CN101876986B CN 101876986 B CN101876986 B CN 101876986B CN 2009102262794 A CN2009102262794 A CN 2009102262794A CN 200910226279 A CN200910226279 A CN 200910226279A CN 101876986 B CN101876986 B CN 101876986B
- Authority
- CN
- China
- Prior art keywords
- character
- state
- string
- current state
- dfa
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于有限状态自动机的字符串匹配方法及内容过滤设备,包括:将DFA中符合设定条件的至少两个顺序关联的状态合并,得到合并后的DFA;相应的字符匹配过程包括:从字符串数据库中依次读取字符,根据当前状态及读取的字符,判断本次匹配是否为字符串匹配;若否,根据当前状态和读取的字符跳转到下一状态;若是,则从对应的字符串存储地址获取当前状态的匹配字符串,并读取下一个字符,判断是否与匹配字符串的下一个字符匹配,当匹配时继续读取下一个字符字符直至字符串匹配成功时,跳转到对应的下一状态;若否,则根据当前状态和读取的字符跳转到下一状态。该方法减少了字符匹配时访问内存的次数,提高了字符匹配的速度和效率。
Description
技术领域
本发明涉及检索技术领域,尤指一种基于有限状态自动机(DeterministicFinite State Automaton,DFA)的字符串匹配方法及内容过滤设备。
背景技术
Aho-Corasick算法于1975年由贝尔实验室的Aho和Corasick在《EfficientString Matching:An Aid to Bibliographic Search》中提出,其核心是一个涵盖所有查询关键字的有限状态自动机(Deterministic Finite State Automaton,DFA)。待搜索的数据库中的每个字符逐个输入到DFA中,当某个查询关键字命中,DFA输出报告。可用于字符串匹配、文本检索、网络数据流深度内容过滤、入侵检测、网络防毒等领域中。
通过Aho-Corasick算法得到DFA的过程中,需要构造三个函数:GOTO,FAILURE和OUTPUT。构造这三个函数的流程包括:
1.1构造GOTO函数。
该过程需要输入的是:要查询的关键字集合。例如:输入的关键字集合是K={y1,y2,...,yk}。
输出的是:GOTO函数和部分完成的OUTPUT函数。
1.2构造FAILURE函数。
该过程需要输入的是:上述过程1.1中得到的GOTO函数及部分完成的OUTPUT函数。
输出的是:FAILURE函数和完成的OUTPUT函数。
1.3构造OUTPUT函数。
该过程将GOTO函数和FAILURE函数进一步合并,得到DFA。
所以该过程输入的是:上述过程1.1中得到的GOTO函数及过程1.2中得到的FAILURE函数。
输出的是:构造完成的DFA。
假设需要在一个字符串数据库中搜索4个关键字,分别是:HE,SHE,HIS和HERZWXY。则在流程1.1中输入K={HE,SHE,HIS,HERZWXY},经过步骤1.1、1.2、1.3的构建过程,得到包含输入前状态(即当前状态)、输入字符与对应输出的输出状态的对应关系的DFA,如表1所示。
表1
当前状态 | 输入字符 | 下一状态 |
0 | H | 1 |
0 | S | 3 |
0 | 其他字符 | 0 |
1 | E | 2 |
1 | I | 6 |
1 | H | 1 |
1 | S | 3 |
1 | 其他字符 | 0 |
3,7 | H | 4 |
3,7 | S | 3 |
3,7 | 其他字符 | 0 |
2,5 | R | 8 |
2,5 | H | 1 |
2,5 | S | 3 |
2,5 | 其他字符 | 0 |
6 | S | 7 |
6 | H | 1 |
6 | 其他字符 | 0 |
4 | E | 5 |
4 | I | 6 |
4 | H | 1 |
4 | S | 3 |
4 | 其他字符 | 0 |
8 | Z | 9 |
8 | S | 3 |
8 | H | 1 |
8 | 其他字符 | 0 |
9 | W | 10 |
9 | S | 3 |
9 | H | 1 |
9 | 其他字符 | 0 |
10 | X | 11 |
10 | S | 3 |
10 | H | 1 |
10 | 其他字符 | 0 |
11 | Y | 12 |
11 | S | 3 |
11 | H | 1 |
11 | 其他字符 | 0 |
各输出状态所对应的字符匹配结果如表2所示。
表2
状态 | 输出 |
2 | HE命中 |
5 | SHE,HE命中 |
7 | HIS命中 |
12 | HEZSWXY命中 |
其他状态 | 无输出 |
DFA初始状态为状态“0”。输入字符‘H’,则DFA状态改为“1”;若输入字符‘S’,则进入“3”状态;若输入其他字符,则保持“0”状态。当DFA处于状态“1”时,若输入字符‘E’,则DFA进入状态“2”,且输出“HE命中”。
假设字符串数据库中某个字符串“SHISHE”,这六个字符将按顺序逐个输入DFA。DFA的初始状态是状态“0”,接收输入字符‘S’后,进入状态“3”;输入字符‘H’后,进入状态“4”;输入字符‘I’后,进入状态“6”;输入字符‘S’后,进入状态“7”,并输出“HIS命中”;接着输入字符‘H’和‘E’,使DFA进入状态“5”,并输出“SHE,HE命中”。
可见,DFA中包含了在当前状态、输入字符后所对应的各种可能的下一状态。以及各个状态和命中的关键字的对应关系。当命中某一关键字时,能够及时的输出命中结果。
应用DFA进行字符匹配时,待搜索数据库中的每个字符在DFA中能够触发一次且仅能够触发一次状态转换。所以,Aho-Corasick的算法应用的优势在于其算法复杂度仅与待搜索数据库的长度有关,而与查询关键字的长度及数目都无关。因此,在字符串匹配的各种已有算法中,Aho-Corasick是迄今为止最快的算法。
在实际应用过程中,DFA通常以一维数组的形式存放在系统的主内存中。当使用DFA搜索数据库或者过滤网络数据流时,每输入一个字符,则必须访问一次主内存,才能得到下一个状态。而访问主内存来获取下一个状态会造成很大的时延,导致字符匹配过程的时延很长。因此,频繁的主内存访问已经成为基于DFA搜索的系统整体性能的瓶颈,严重影响了字符串匹配的速度和效率。
发明内容
本发明实施例提供一种基于有限状态自动机的字符串匹配方法及内容过滤设备,用以解决现有技术中DFA频繁访问内存所带来的字符匹配延时很长的问题。
一种基于有限状态自动机的字符串匹配方法,包括:将所述DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;当基于所述合并后的DFA进行字符匹配时,执行下列步骤:
从字符串数据库中依次读取字符,根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;
若否,则根据所述当前状态和读取的字符跳转到下一状态;
若是,则从对应的字符串存储地址获取当前状态的所述匹配字符串,并从所述字符串数据库中读取下一个字符,判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则继续从所述字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则根据所述当前状态和读取的字符跳转到下一状态。
一种基于有限状态自动机DFA的字符串匹配装置,包括:
生成模块,用于将所述DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;
判断模块,用于从字符串数据库中依次读取字符,基于所述合并后的DFA根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;若是,通知所述第一执行模块;若否,通知所述第二执行模块;
第一执行模块,用于从对应的字符串存储地址获取当前状态的所述匹配字符串,并从所述字符串数据库中读取下一个字符,判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则继续从所述字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知所述第二执行模块;
第二执行模块,用于根据所述当前状态和读取的字符跳转到下一状态。
一种内容过滤设备,在该内容过滤设备中设置上述的基于有限状态自动机的字符串匹配装置。
本发明实施例提供的基于有限状态自动机的字符串匹配方法及内容过滤设备,通过将DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;当基于合并后的DFA进行字符匹配时,根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;根据判断结果执行不同的匹配流程。通过将符合设定条件的字符匹配合并为字符串匹配,实现了字符匹配的加速,大大减少了应用DFA进行字符匹配时访问主内存的次数,解决了现有技术中频繁的主内存访问所带来的系统性能瓶颈,减少了字符匹配过程中的时延,提高了DFA的字符匹配处理速度和效率。
附图说明
图1为本发明实施例中基于有限状态自动机的字符串匹配方法的流程图;
图2为本发明实施例中字符串匹配装置的结构示意图。
具体实施方式
为了解决现有技术中使用DFA搜索数据库或者过滤网络数据流时存在的频繁的主内存访问严重影响字符串匹配的速度和效率的问题,减少字符匹配过程中的时延,则必须尽可能减少字符匹配过程中的内存访问次数。
仔细分析现有DFA状态表(表1),可以发现其中的状态2、5、8、9、10和11,这六个状态具有下列两个特征:
(1)状态顺序关联。
例如:表1中的状态2、5、8、9、10和11,在状态2或5时,输入字符‘R’,进入状态8;在状态8时,输入字符‘Z’,进入状态9;在状态9时,输入字符‘W’,进入状态10;在状态10时,输入字符‘X’,进入状态11。因此这六个状态是顺序关联的。
(2)除输入某个特定字符外,输入其他字符时的状态跳转情况相同。
例如:表1中的状态2、5、8、9、10和11,除了下列字符输入之外:状态2和5时输入字符‘R’,状态8时输入字符‘Z’,状态9时输入字符‘W’,状态10时输入字符‘X’,状态11时输入字符‘Y’,在状态2、5、8、9、10和11这几个状态下输入其他的字符,其状态跳转情况相同,在表1中这几个状态在输入除特定字符外的其他字符时,其跳转情况均与初始状态(即状态0)时相同。
因此,可以将符合上述特定条件的包含至少两个状态的状态集合,合并成一个状态,将状态集合中各状态的特定字符按照状态关联的顺序组成特定的字符串。当输入该特定字符串时,只需要进行一次状态跳转,访问一次内存。从而减少字符匹配过程中内存访问的次数。
例如表1的DFA,将状态2、5、8、9、10、11合并后,得到的DFA缩减为如下表3所示。
表3
当前状态 | 输入字符 | 下一状态 |
0 | H | 1 |
0 | S | 3 |
0 | 其他字符 | 0 |
1 | E | 2 |
1 | I | 6 |
1 | H | 1 |
1 | S | 3 |
1 | 其他字符 | 0 |
3,7 | H | 4 |
3,7 | S | 3 |
3,7 | 其他字符 | 0 |
2,5 | [RZWXY] | 8 |
2,5 | H | 1 |
2,5 | S | 3 |
2,5 | 其他字符 | 0 |
6 | S | 7 |
6 | H | 1 |
6 | 其他字符 | 0 |
4 | E | 5 |
4 | I | 6 |
4 | H | 1 |
4 | S | 3 |
4 | 其他字符 | 0 |
合并后的DFA的结果输出如下表4所示。
表4
状态 | 输出 |
2 | HE命中 |
5 | SHE,HE命中 |
7 | HIS命中 |
8 | HERZWXY命中 |
其他状态 | 无输出 |
上述表3和表4即为HE,SHE,HIS和HEZSWXY四个关键字的状态合并后的有限状态自动机DFA。
也就是说,本申请实施例提供一种基于有限状态自动机的字符串匹配方法,将现有DFA中符合设定条件的具有关联关系的状态集合进行合并,作为一个状态。具体为:将符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成一个匹配字符串,最终得到至少有一个状态为匹配字符串后跳转的合并后的DFA;则在基于合并后的DFA进行字符匹配时,合并后的状态中包含的匹配字符串的输入只需访问一次内存,从而实现有效减少内存访问时延的目的。
基于上述状态合并后的DFA进行字符串匹配的方法流程如图1所示,执行步骤如下:
步骤S101:从字符串数据库中依次读取字符。
步骤S102:根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配。具体包括:
首先,根据当前状态和本次读取的字符,确定出对应的跳转状态的状态序号。
然后,比较确定出的对应的跳转状态的状态序号是否大于状态合并后的DFA中当前状态的最大状态序号,当大于时,确定本次匹配为字符串匹配;否则,确定本次匹配不是字符串匹配。
例如表3中所示的DFA,当状态2或5时,输入字符R后,确定出对应的跳转状态为8;而合并后的DFA的中当前状态的最大状态序号为7,因此确定此处为字符串匹配。
若是,执行步骤S103;否则,执行步骤S106。
步骤S103:从对应的字符串存储地址获取当前状态的匹配字符串。
确定出当前状态在输入本次获取的字符后,对应的是字符串匹配时;根据当前状态的状态序号到对应的字符串存储位置获取当前状态的匹配字符串。
步骤S104:从字符串数据库中读取下一个字符。
步骤S105:判断读取的下一个字符是否与获取的匹配字符串相匹配。
此处判断读取的下一个字符是否与匹配字符串的下一个字符相匹配。
例如:表3所示的DFA,当输入字符R后,启动字符串匹配流程;若获取的下一个字符为Z,则说明读取的下一个字符是否与匹配字符串的下一个字符匹配;当字符Z匹配后在读取下一个字符时,若读取的是W则说明相匹配;否则认为不相匹配。
若是,返回继续执行步骤S104继续从字符串数据库中读取下一个字符,直至字符串匹配成功时,跳转到当前状态和匹配字符串所对应的下一状态;若否,执行步骤S106。
步骤S106:根据当前状态和读取的字符跳转到下一状态。
并返回步骤S101继续读取字符。
例如:步骤S102中,当状态2或5时,输入字符不是R,则根据输入的字符,执行对应的状态跳转,输入H或S跳转至状态1或3,输入其他字符跳转至状态0。
又例如,步骤S105中,由于是字符串匹配,因此没有执行状态跳转,仍是维持在状态2或5,并等待继续输入字符,若输入的字符不是与字符串相匹配的字符时,则根据输入的字符,执行对应的状态跳转,输入H或S跳转至状态1或3,输入其他字符跳转至状态0。
上述合并后的DFA也可以以一维数组的形式存放在系统主内存中,可以按各当前状态的状态序号的大小顺序存放。
一般可以设置每个状态占用256个字节。这是由于DFA的状态总数一般不会超过256,例如:表1中的DFA状态总数为12,合并后的DFA状态总数为8。因此,状态序号也就不会大于255(即DFA中任一状态的状态序号均可使用一个字节来存放)。同时每个状态对应的下一状态(即每个当前状态所对应的跳转状态)不会超过255个,所以每个状态占用256(ASCII字符表的字符总数)个字节即可,其中该当前状态的序号存放在该状态所占用的第0个字节中,所对应的下一状态依次存放在所占用的第0-255字节中。
假设该DFA一维数组在系统主内存的存放起始地址为DFA_ADDR,则在当前状态X下输入字符N后的下一状态为地址DFA_ADDR[X*256+N]处的值。在每个状态(当前状态)下,当输入字符N(十进制值)时所对应的下一状态(输出状态)存储在从该状态的起始位置之后的第N(0=<N<=255)个字节中。假设当前状态X所占用的第M、N个字节的值分别为A和B,而其他字节的值为0;表示当DFA的当前状态为X时;输入M,跳转到状态A;输入N,跳转到状态B,输入其他字节跳转到初始状态0。
以状态0为例,在其占用的256个字节中,第72字节的值为1,表示输入H(H字符的十进制值是72),DFA从状态“0”,进入状态“1”;第83字节的值为3,表示输入S(S字符的十进制值是83),DFA从状态“0”,进入状态“3”;其余字节的值均为0,表示输入其他字符,DFA维持“0”状态不变。
如果有限状态自动机的状态总数不超过256,那么如上所述每个状态在内存中占用的存储空间就是256个字节;当状态总数超过256,假设是300,那么存储一个状态的序号就需要两个字节,这种情况下,每个状态占用的字节数则为256×2。假设系统内存中用于存储有限状态自动机的起始地址是ADD,当在状态Z下输入字符M(对应数值77)时,对应的跳转目的状态就可以从ADD[Z×(256*2)+77]这个地址处获取。
在经过状态合并,至少有一个状态为字符串匹配后跳转的DFA中,根据匹配字符串的数量,依此定义各匹配字符串所对应的跳转状态序号为:TOTAL_STATE_NUM+n。其中,n为匹配字符串的编号(当有多个字符串时,则依次编号),n≥1;TOTAL_STATE_NUM为DFA中最大的当前状态序号。例如表3中,状态2或5输入字符‘R’后的跳转目的状态改为8(即:7+1),即匹配字符串“RZWXY”跳转状态序号。注:合并后的DFA的各个字符串输入有唯一的序号标识。
例如:表3所示的DFA,假设DFA当前状态为2,输入字符‘R’(十进制值为82),DFA在系统主内存的存放的起始位置的地址为DFA_ADDR,则在DFA_ADDR[2*256+82]的位置存放的是输入字符R后对应的跳转状态的状态序号:TOTAL_STATE_NUM+n。
状态合并后的DFA中的所有匹配字符串存储在一个单独的一维数组中,该数组的结构类型可以定义如下:
typedef struct{
char str[MAX_STRING_INPUT_LENGTH];//字符串
}str_struct;
其中,MAX_STRING_INPUT_LENGTH是状态合并后的DFA的最长的字符串输入长度。
当需要读取字符串时,可以根据当前状态的状态序号确定当前状态的匹配字符串存储位置,从一位数组中对应的字符串存储位置读取存储的该匹配字符串。例如:表3中,假设状态合并后DFA的字符串输入存放的一维结构数组的存放地址为STR_STRUCT_ADDR,则系统程序从一维数组的第n个字符串存储位置STR_STRUCT_ADDR[n].str处读取得到字符串“RZWXY”。其中,[n]则表示第n个匹配字符串。
基于上述DFA以一维数组存放的模式,执行上述图1所示的字符串匹配流程时。其中:
当需要根据当前状态和本次读取的字符确定出对应的跳转状态的状态序号时,既可以到相应的存储位置去查找并获取。即每个当前状态在输入字符后所对应的跳转状态的存储位置,根据该状态的状态序号和输入字符所对应的十进制值确定。具体为:
步骤S102中,根据当前状态及本次所读取得的字符的十进制值,计算得到对应的跳转状态在一维数组中的存储位置,从确定出的存储位置读取对应的跳转状态的状态序号。
其中,当每个状态占用256个字节时,计算当前状态的状态序号与256的乘积,再计算乘积与本次输入字符所对应的十进制值之和,即可得到对应的跳转状态存储位置在一位数组中的存储位置。
在执行上述步骤S102,读取到状态序号为TOTAL_STATE_NUM+n时,发现该状态序号的值大于DFA中当前状态的最大序号的值,则可以确定该处为字符串匹配了。
则步骤S103中,就可以到存储匹配字符串的一位数组的对应存储为止获取该状态对应的匹配字符串。
步骤S105中,当输入R之后,输入的字符不为‘Z’,而是‘H’,则系统程序转而读取DFA_ADDR[2*256+72],(72是字符‘H’的十进制值),得到跳转状态序号为1。因为1<TOTAL_STATE_NUM,系统程序判定为正常单字符输入,走正常处理流程,把DFA当前状态改为1。其他非‘Z’的输入字符的处理流程同理。
当输入R之后,输入的字符为Z时,不执行状态跳转,接着读取后续输入字符,继续匹配字符串“RZWXY”,直到匹配成功,中途若匹配失败,则走前述正常处理流程。
本发明实施例提供的上述基于有限状态自动机的字符串匹配方法,假设字符串数据库中依次输入的字符为ABCHERZWXYGF,利用现有技术中的DFA,访问内存次数为12,每个字符一次内存访问;利用缩减合并后的DFA,访问内存的次数为8,字符‘A’、‘B’、‘C’、‘H’、‘E’,‘G’和‘F’各一次;匹配字符子串“RZWXY”需访问内存两次(第一次确定当前状态为字符串匹配时,并从存储DFA的一维数组中对应的跳转状态序号存储位置STR_STRUCT_ADDR处获取跳转状态的状态序号,并确定“RZWXY”在存储匹配字符串的一维数组中的存储位置,第二次从存储匹配字符串的一维数组中的对应存储位置STR_STRUCT_ADDR中获取匹配字符串),整个过程访问内存总次数少了3次。在实际应用中,访问内存的减少次数和匹配字符串的长度、DFA中包含的匹配字符串的数量相关。
根据本发明实施例提供的基于有限状态自动机的字符串匹配方法,可以构建一种基于有限状态自动机的字符串匹配装置,如图2所示,包括:生成模块10、判断模块20、第一执行模块30和第二执行模块40。
生成模块10,用于将DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA。
判断模块20,用于从字符串数据库中依次读取字符,基于合并后的DFA根据当前状态及本次所读取的字符,判断本次匹配是否为字符串匹配;若是,通知第一执行模块30;若否,通知第二执行模块40。
较佳的,上述判断模块20,具体包括:第一读取单元201、确定单元202和第一判断单元203。
第一读取单元201,用于从字符串数据库中依次读取字符。
确定单元202,用于根据当前状态和第一读取单元201本次读取的字符,确定出对应的跳转状态的状态序号。
第一判断单元203,用于比较确定出的状态序号是否大于状态合并后的DFA中当前状态的最大状态序号;当大于时,确定本次匹配为字符串匹配并通知第一执行模块30;否则,确定本次匹配不是字符串匹配并通知第二执行模块40。
第一执行模块30,用于从对应的字符串存储地址获取当前状态的匹配字符串,并从字符串数据库中读取下一个字符,判断读取的下一个字符是否与匹配字符串的下一个字符匹配,若是,则继续从字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知第二执行模块40。
较佳的,上述第一执行模块30,具体包括:获取单元301、第二读取单元302和第二判断单元303。
获取单元301,用于根据当前状态的状态序号确定当前状态的所述匹配字符串存储位置,从对应的字符串存储位置读取存储的该匹配字符串。
第二读取单元302,用于从字符串数据库中读取下一个字符。
第二判断单元303,用于判断读取的下一个字符是否与匹配字符串的下一个字符匹配,若是,则通知第二读取单元302继续从字符串数据库中读取下一个字符,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知第二执行模块40。
第二执行模块40,用于根据当前状态和读取的字符跳转到下一状态。
本发明实施例还提供了一种内容过滤设备,该内容过滤设备中设置有上述基于有限状态自动机的字符串匹配装置,该内容过滤设备可以是具有内容过滤功能的路由器、交换机、网关或防火墙等等。
本发明实施例提供的基于有限状态自动机的字符串匹配方法及装置,对DFA中符合特定条件的关联状态进行合并,使得某些状态的字符匹配可以合并为字符串匹配。当对该匹配字符串进行匹配时,大大减少了应用Aho-Corasick算法所需访问内存的次数,提高了Aho-Corasick算法在文本检索、字符串匹配和网络数据流过滤等领域中的处理速度和效率,进一步提高了DFA的字符匹配处理能力。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化、替换或应用到其他类似的装置,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (12)
1.一种基于有限状态自动机DFA的字符串匹配方法,其特征在于,包括:将所述DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;当基于所述合并后的DFA进行字符匹配时,执行下列步骤:
从字符串数据库中依次读取字符,根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;
若否,则根据所述当前状态和读取的字符跳转到下一状态;
若是,则从对应的字符串存储地址获取当前状态的所述匹配字符串,并从所述字符串数据库中读取下一个字符,判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则继续从所述字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则根据所述当前状态和读取的字符跳转到下一状态。
2.如权利要求1所述的方法,其特征在于,所述根据当前状态及本次所读取的字符,判断本次匹配是否为字符串匹配,具体包括:
根据当前状态和本次读取的字符,确定出对应的跳转状态的状态序号;
比较确定出的状态序号是否大于状态合并后的DFA中当前状态的最大状态序号,当大于时,确定本次匹配为字符串匹配;否则,确定本次匹配不是字符串匹配。
3.如权利要求2所述的方法,其特征在于,所述合并后的DFA以一维数组的形式存放;
每个当前状态在输入字符后所对应的跳转状态的存储位置,根据该当前状态的状态序号和输入字符所对应的十进制值确定。
4.如权利要求3所述的方法,其特征在于,根据当前状态和本次读取的字符,确定对应的跳转状态的状态序号,具体包括:
根据当前状态及本次所读取的字符的十进制值,计算得到对应的跳转状态在一维数组中的存储位置;
从确定出的存储位置读取所述对应的跳转状态的状态序号。
5.如权利要求4所述的方法,其特征在于,所述计算得到对应的跳转状态的存储位置,具体为:
计算当前状态的状态序号与256的乘积,计算所述乘积与本次输入字符所对应的十进制值之和,得到对应的跳转状态存储位置在一位数组中的存储位置。
6.如权利要求1-5任一所述的方法,其特征在于,所述匹配字符串存储在一个一维数组中;
当需要读取字符串时,根据当前状态的状态序号确定当前状态的所述匹配字符串存储位置,从存储匹配字符串的一位数组中对应的字符串存储位置读取存储的该匹配字符串。
7.一种基于有限状态自动机DFA的字符串匹配装置,其特征在于,包括:
生成模块,用于将所述DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;
判断模块,用于从字符串数据库中依次读取字符,基于所述合并后的DFA根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;若是,通知所述第一执行模块;若否,通知所述第二执行模块;
第一执行模块,用于从对应的字符串存储地址获取当前状态的所述匹配字符串,并从所述字符串数据库中读取下一个字符,判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则继续从所述字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知所述第二执行模块;
第二执行模块,用于根据所述当前状态和读取的字符跳转到下一状态。
8.如权利要求7所述的装置,其特征在于,所述判断模块,具体包括:
第一读取单元,用于从字符串数据库中依次读取字符;
确定单元,用于根据当前状态和所述第一读取单元本次读取的字符,确定出对应的跳转状态的状态序号;
第一判断单元,用于比较确定出的状态序号是否大于状态合并后的DFA中当前状态的最大状态序号;当大于时,确定本次匹配为字符串匹配并通知所述第一执行模块;否则,确定本次匹配不是字符串匹配并通知所述第二执行模块。
9.如权利要求7或8所述的装置,其特征在于,所述第一执行模块,具体包括:
获取单元,用于根据当前状态的状态序号确定当前状态的所述匹配字符串存储位置,从对应的字符串存储位置读取存储的该匹配字符串;
第二读取单元,用于从所述字符串数据库中读取下一个字符;
第二判断单元,用于判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则通知第二读取单元继续从所述字符串数据库中读取下一个字符,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知所述第二执行模块。
10.一种内容过滤设备,其特征在于,包括:
生成模块,用于将所述DFA中符合设定条件的至少两个顺序关联的状态中包含的状态跳转情况不相同的特定字符组成匹配字符串,得到至少一个状态为匹配字符串后跳转的合并后的DFA;
判断模块,用于从字符串数据库中依次读取字符,基于所述合并后的DFA根据当前状态及本次读取的字符,判断本次匹配是否为字符串匹配;若是,通知所述第一执行模块;若否,通知所述第二执行模块;
第一执行模块,用于从对应的字符串存储地址获取当前状态的所述匹配字符串,并从所述字符串数据库中读取下一个字符,判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则继续从所述字符串数据库中读取下一个字符进行判断,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知所述第二执行模块;
第二执行模块,用于根据所述当前状态和读取的字符跳转到下一状态。
11.如权利要求10所述的设备,其特征在于,所述判断模块,具体包括:
第一读取单元,用于从字符串数据库中依次读取字符;
确定单元,用于根据当前状态和所述第一读取单元本次读取的字符,确定出对应的跳转状态的状态序号;
第一判断单元,用于比较确定出的状态序号是否大于状态合并后的DFA中当前状态的最大状态序号;当大于时,确定本次匹配为字符串匹配并通知所述第一执行模块;否则,确定本次匹配不是字符串匹配并通知所述第二执行模块。
12.如权利要求10或11所述的设备,其特征在于,所述第一执行模块,具体包括:
获取单元,用于根据当前状态的状态序号确定当前状态的所述匹配字符串存储位置,从对应的字符串存储位置读取存储的该匹配字符串;
第二读取单元,用于从所述字符串数据库中读取下一个字符;
第二判断单元,用于判断读取的下一个字符是否与所述匹配字符串的下一个字符匹配,若是,则通知第二读取单元继续从所述字符串数据库中读取下一个字符,直至字符串匹配成功时,跳转到当前状态和所述匹配字符串所对应的下一状态;若否,则通知所述第二执行模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102262794A CN101876986B (zh) | 2009-11-27 | 2009-11-27 | 基于有限状态自动机的字符串匹配方法及内容过滤设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102262794A CN101876986B (zh) | 2009-11-27 | 2009-11-27 | 基于有限状态自动机的字符串匹配方法及内容过滤设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101876986A CN101876986A (zh) | 2010-11-03 |
CN101876986B true CN101876986B (zh) | 2012-11-21 |
Family
ID=43019544
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102262794A Expired - Fee Related CN101876986B (zh) | 2009-11-27 | 2009-11-27 | 基于有限状态自动机的字符串匹配方法及内容过滤设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101876986B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9930052B2 (en) | 2013-06-27 | 2018-03-27 | International Business Machines Corporation | Pre-processing before precise pattern matching |
CN115576535A (zh) * | 2022-11-10 | 2023-01-06 | 商飞软件有限公司 | 一种通用的表达式解析器 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714995B (zh) * | 2013-08-30 | 2019-04-23 | 凯为有限责任公司 | 用于遍历正则表达式图样生成的nfa的系统和方法 |
US9507563B2 (en) | 2013-08-30 | 2016-11-29 | Cavium, Inc. | System and method to traverse a non-deterministic finite automata (NFA) graph generated for regular expression patterns with advanced features |
CN104424329A (zh) * | 2013-09-10 | 2015-03-18 | 华为技术有限公司 | 压缩正则表达式的方法、匹配字符串的方法及装置 |
CN103729452B (zh) * | 2013-12-31 | 2017-05-10 | 杭州华为数字技术有限公司 | 一种规则匹配方法及装置 |
US10110558B2 (en) | 2014-04-14 | 2018-10-23 | Cavium, Inc. | Processing of finite automata based on memory hierarchy |
US10002326B2 (en) | 2014-04-14 | 2018-06-19 | Cavium, Inc. | Compilation of finite automata based on memory hierarchy |
CN105468597B (zh) * | 2014-08-14 | 2020-09-25 | 腾讯科技(北京)有限公司 | 一种获取跳转距离的方法及装置 |
CN105159980B (zh) * | 2015-08-27 | 2019-03-19 | 魅族科技(中国)有限公司 | 一种定位网址的方法及系统 |
CN108287887A (zh) * | 2018-01-16 | 2018-07-17 | 北京奇艺世纪科技有限公司 | 一种多模匹配方法和装置 |
CN111159490B (zh) * | 2019-12-13 | 2023-05-26 | 杭州迪普科技股份有限公司 | 一种模式字符串的处理方法、装置及设备 |
CN117709298B (zh) * | 2024-02-05 | 2024-05-07 | 中国电子信息产业集团有限公司第六研究所 | 一种双字符流的扫描方法、电子设备、存储介质及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1801152A (zh) * | 2006-01-13 | 2006-07-12 | 清华大学 | 一种用于文本或网络内容分析的多关键词匹配方法 |
CN101551803A (zh) * | 2008-03-31 | 2009-10-07 | 华为技术有限公司 | 一种建立模式匹配状态机、模式识别的方法和装置 |
-
2009
- 2009-11-27 CN CN2009102262794A patent/CN101876986B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1801152A (zh) * | 2006-01-13 | 2006-07-12 | 清华大学 | 一种用于文本或网络内容分析的多关键词匹配方法 |
CN101551803A (zh) * | 2008-03-31 | 2009-10-07 | 华为技术有限公司 | 一种建立模式匹配状态机、模式识别的方法和装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9930052B2 (en) | 2013-06-27 | 2018-03-27 | International Business Machines Corporation | Pre-processing before precise pattern matching |
US10171482B2 (en) | 2013-06-27 | 2019-01-01 | International Business Machines Corporation | Pre-processing before precise pattern matching |
US10333947B2 (en) | 2013-06-27 | 2019-06-25 | International Business Machines Corporation | Pre-processing before precise pattern matching |
CN115576535A (zh) * | 2022-11-10 | 2023-01-06 | 商飞软件有限公司 | 一种通用的表达式解析器 |
Also Published As
Publication number | Publication date |
---|---|
CN101876986A (zh) | 2010-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101876986B (zh) | 基于有限状态自动机的字符串匹配方法及内容过滤设备 | |
CN101639861B (zh) | 一种基于有限状态自动机的字符串匹配方法及装置 | |
CN101901268B (zh) | 一种规则匹配方法及装置 | |
Chazelle et al. | Fractional cascading: I. A data structuring technique | |
CN103580900B (zh) | 一种基于事件链的关联分析系统 | |
CN102339320B (zh) | 恶意网页的识别方法以及识别装置 | |
CN103309966B (zh) | 基于时间滑动窗口的数据流点连接查询方法 | |
CN100471121C (zh) | 一种解码方法和解码器 | |
CN102521356B (zh) | 基于确定有限状态自动机的正则表达式匹配设备和方法 | |
Kemper | Reachability analysis based on structured representations | |
CN103685224A (zh) | 网络入侵检测方法 | |
CN105117430B (zh) | 一种基于等价类的重复任务过程发现方法 | |
CN112286963A (zh) | 一种区块链终端数据可信查询系统及其实现方法 | |
CN101944121B (zh) | 有限状态自动机生成方法、关键字匹配方法及装置和设备 | |
CN107437026A (zh) | 一种基于广告网络拓扑的恶意网页广告检测方法 | |
CN107483381A (zh) | 关联账户的监控方法及装置 | |
CN103685222A (zh) | 基于确定性有穷状态自动机的数据匹配检测方法 | |
CN101079890B (zh) | 一种生成特征码确定状态机的方法和装置 | |
CN101030897B (zh) | 一种入侵检测中模式匹配的方法 | |
CN102831232B (zh) | 字符串的匹配方法及装置 | |
CN102427416B (zh) | 分布式事件检测方法及装置 | |
CN106250456A (zh) | 一种中标公告的抽取方法及装置 | |
CN106445968A (zh) | 一种数据合并方法及装置 | |
CN103166942A (zh) | 一种恶意代码的网络协议解析方法 | |
CN103294735B (zh) | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121121 Termination date: 20151127 |
|
CF01 | Termination of patent right due to non-payment of annual fee |