CN101174261B - 基于扩展有限状态机的多正则表达式联合搜索方法 - Google Patents
基于扩展有限状态机的多正则表达式联合搜索方法 Download PDFInfo
- Publication number
- CN101174261B CN101174261B CN2006101143135A CN200610114313A CN101174261B CN 101174261 B CN101174261 B CN 101174261B CN 2006101143135 A CN2006101143135 A CN 2006101143135A CN 200610114313 A CN200610114313 A CN 200610114313A CN 101174261 B CN101174261 B CN 101174261B
- Authority
- CN
- China
- Prior art keywords
- state
- nfa
- function
- sign
- state machine
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于扩展有限状态机的多正则表达式联合搜索方法。该扩展有限状态机增加了状态标识集合、状态转换函数标识集合、状态与状态标识的映射函数、状态转换函数与状态转换函数标识的映射函数等四个参数,通过给状态引入标识,同时给状态转换函数也引入标识,可以使用户无需编写额外例程即可实现高效的多正则表达式的并行搜索,可以保留单个正则表达式的信息,同时还可以有效处理字符串回退。
Description
技术领域
本发明涉及一种基于扩展有限状态机的多正则表达式联合搜索方法,属于计算机技术领域。
背景技术
随着IT技术的发展,信息量呈爆炸性增长趋势,信息检索占据了越来越重要的地位。基于正则表达式的搜索方法,由于实现简单、性能高效,在字符串搜索中得到了广泛应用,并且出现了一大批成熟的支持工具,grep、egrep、awk、sed等就是其中的典型代表。
正则表达式(Regular Expression),又称正规表达式或常规表达式,常用来描述或匹配一系列符合某个句法规则的字符串。简单地说,一个正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式,该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式及后文提及的有限状态机等内容,是计算机领域人员的公共常识,此处及后文不再赘述。
基于正则表达式的搜索方法,一般先把正则表达式转换成对应的有限状态机,然后基于有限状态机来完成搜索过程。有限状态机有两种基本形态:不确定性有限状态机(NFA)和确定性有限状态机(DFA)。不确定性有限状态机M是一个五元式,M=(Q,Vt∪{ε},δ,q0,F),其中,Q为有穷状态集合,Vt为输入字母表,ε为空串,δ为状态转换函数,q0为始态,F为终止状态集。确定性有限状态机M也是一个五元式,M={Q,Vt,δ,q0,F},其中,各个参数的含义与不确定性有限状态机中对应参数的含义相同。二者的区别在于,NFA可以接受空串ε作为输入并且状态转换函数允许是多值的,DFA不能接受空串ε作为输入并且状态转换函数必须是单值的。不确定性有限状态机和确定性有限状态机的描述能力是等价的,可以相互转换,转换的方法可以采用现在广泛采用的子集构造算法。
目前流行的基于正则表达式的搜索方法,多以单个正则表达式为处理对象。如果要同时搜索多个正则表达式,一般有两种处理方法:一种是对每个子正则表达式分别进行搜索,最后把各次得到的搜索结果合并;另一种是通过选择运算把这些子正则表达式结合成一个新的正则表达式,然后对新得到的正则表达式进行搜索。无论采用哪种方法,均存在一定不足。第一种方法弊病在于扫描遍数过多,速度太慢;第二种方法搜索速度很快,然而却损失了单个正则表达式的信息,如果不添加额外处理,通过选择运算后得到的新正则表达式无法区分出组成它的各个子正则表达式。这种“只见森林不见树木”的处理方法,在很多场合都是不方便的。比如,如果不对搜索过程添加特殊处理例程,该方法无法知道搜索结果到底匹配了哪个子正则表达式。
如何高效地并行搜索多个正则表达式,同时又有效保留原有的单个正则表达式的信息,是字符串搜索中的一个常见问题。实际中,多采用上述提及的第二种方法,这样可以获得较快的搜索速度,但需要用户手工编写特别的处理例程,给用户带来了额外的处理负担。
字符串搜索另一个常见问题是字符串的回退。例如考虑从字符串“This is a black box”中同时搜索“black”和“lack”两个正则表达式,在搜索到了“black”之后,必须把匹配的字符串回退到源字符串中,否则“lack”就不会得到匹配。在现有技术中,对于单个正则表达式的回退处理比较容易,只需把已匹配的字符串全部回退到源字符串中,同时把相应的有限状态机重置到开始状态即可。对于同时搜索多个正则表达式的回退,处理起来比较复杂,目前多是通过用户编写额外的处理例程解决,加重了用户的处理负担。
发明内容
本发明的目的在于提供一种基于扩展有限状态机的多正则表达式联合搜索方法。该扩展有限状态机通过对传统有限状态机的功能扩展,可以一遍扫描同时搜索多个正则表达式,同时又可以有效保留单个正则表达式的信息。
为实现上述的发明目的,本发明采用下述的技术方案:
一种用在字符串搜索中的基于扩展有限状态机的多正则表达式联合搜索方法,所述扩展有限状态机包括有穷状态集合Q、输入字母表Vt、状态转换函数δ、始态q0、终止状态集F、状态标识集合P、状态与状态标识的映射函数ρ、状态转换函数的标识集合N和状态转换函数与状态转换函数标识的映射函数ω,其中状态标识集合P用于给状态机中的每一个状态加一个标识,状态与状态标识的映射函数ρ用于通过该映射函数计算出一个给定状态的状态标识,状态转换函数的标识集合N用于给状态机中的每一个状态转换函数引入一个唯一的标识,状态转换函数与状态转换函数标识的映射函数ω用于计算与一条状态转换函数对应的标识;
所述扩展有限状态机包括扩展非确定性有限状态机和扩展确定性有限状态机,所述扩展非确定性有限状态机中的状态转换函数允许是多值的,所述扩展确定性有限状态机不接受空串作为输入且状态转换函数是单值的;
该方法的特征在于:
(1)构造同时识别多个正则表达式的扩展非确定性有限状态机或扩展确定性有限状态机;
(2)分配一个足够大的状态转换函数标识空间S,该空间中的每一个元素用来存放一个状态转换函数标识,用变量flag标识该空间的使用状况,置flag=0,记当前状态标识集合U=ρ(q0);
(3)正向搜索时,每当调用一次状态转换函数δ(p,a)=q,则自动执行下面三个步骤:
U=U∩ρ(q),
S[flag]=ω(p,a,q),
flag=flag+1,
其中,δ(p,a)=q表示状态p在遇到字符a时转移到状态q;
(4)逆向回退字符时:
(4.1)如果只沿着某个正则表达式回退,且该正则表达式的标识为i,执行如下步骤:记状态机当前状态为m,若i∈ρ(m),则可以回退字符,否则停止回退,若可以回退字符,则查找状态转换函数标识空间对应的映射函数ω,然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1,释放标识空间,若继续回退字符,则重复本步骤,否则结束回退;
(4.2)如果不沿着某个正则表达式回退,则执行如下步骤:记状态机当前状态为m,查找状态转换函数标识空间对应的映射函数ω,然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1,若继续回退字符,则重复本步骤,否则结束回退。
其中,在所述步骤(1)中,构造同时识别多个正则表达式的扩展非确定性有限状态机E-NFA包括如下步骤:
(11)为多个子正则表达式的每一个分别构造识别单个正则表达式的扩展非确定性有限状态机E-NFAm;
(12)增加一个新的始态s作为E-NFA的始态,从s到步骤(11)中构造的各个E-NFAm的始态分别引一条ε弧,把s作为E-NFA的始态;增加一个新的终态e作为E-NFA的终态,从各个E-NFAm的终态分别引入一条ε弧到e;
(13)计算有穷状态集合Q:该有穷状态集合Q为各个E-NFAm的状态集加上步骤(12)新生成的始态和终态;
(14)计算状态转换函数δ:各个E-NFAm的状态转换函数均为E-NFA中有效的状态转换函数;
(15)计算状态标识集合P:该状态标识集合为各个E-NFAm的状态标识集合的合集;
(16)计算状态与状态标识的映射函数ρ:其中E-NFA的始态s的状态标识为各个E-NFAm的始态的状态标识之和,E-NFA的终态e的状态标识为各个E-NFAm的终态集合的状态标识之和,各个E-NFAm中每个映射函数关系都是E-NFA中有效的映射函数关系;
(17)计算状态转换函数与状态转换函数标识的映射函数ω:其中各个E-NFAm中的每个映射函数关系都是E-NFA中的有效映射函数关系;对步骤(12)新添加的每一个与ε弧相对应的状态转换函数,生成一个唯一的标识,将该标识加入到集合Nnew中,并且在映射函数中记录;
(18)计算状态转换函数的标识集合N:E-NFA的状态转换函数的标识集合为各个E-NFAm的状态转换函数标识集与步骤(17)新生成的Nnew的合集;
(19)计算输入字母表Vt:E-NFA的输入字母表为各个E-NFAm字母表的合集;
(20)计算终止状态集F:E-NFA的终止状态集为各个E-NFAm终态集合之和加上步骤(12)新生成的终态e。
在所述步骤(11)中,构造识别单个正则表达式的扩展非确定性有限状态机E-NFAm包括如下的步骤:
(111)给每一个正则表达式生成一个唯一的编号标识i;
(112)置扩展非确定性有限状态机的状态标识集合P={i},置状态转换函数标识集合N为空集;
(113)以Thompson结构为基础,构造识别单个正则表达式的标准非确定性有限状态机,得到扩展非确定性有限状态机的状态集合、字母表、状态转换函数、开始状态和结束状态;
(114)计算状态与状态标识的映射函数ρ,对状态集合中的每一个状态q,加入ρ(q)=i;
(115)计算状态转换函数的标识集合及状态转换函数与状态转换函数标识的映射函数,对每一个状态转换函数,生成一个唯一的标识,将该标识加入到标识集合中,并且在映射函数中记录。
本发明通过扩展传统的有限状态机,给状态引入标识,同时给状态转换函数也引入标识,从而可以有效解决上述提及的串搜索中的两个常见问题,用户无需编写额外例程即可实现高效的多正则表达式的并行搜索,又可以保留单个正则表达式的信息,同时可以有效处理字符串回退。
具体实施方式
本发明的核心技术思想在于扩充了传统的非确定性有限状态机和确定性有限状态机,给其引入了状态标识和状态转换函数标识,本发明人将其分别命名为扩展非确定性有限状态机和扩展确定性有限状态机,它们的定义如下:
定义1扩展非确定性有限状态机(E-NFA)
扩展非确定性有限状态机M是一个九元式,M=(Q,P,N,Vt∪{ε},ρ,ω,δ,q0,F)。其中:
◆Q、Vt、ε、δ、q0、F的含义与非确定性有限状态机中对应参数含义相同;
◆P表示有穷状态标识集合;
◆N表示有穷状态转换函数标识集合;
◆ρ表示状态与状态标识的映射函数,为Q->2P,其中2P表示P的幂集;
◆ω表示状态转换函数与状态转换函数标识的映射函数,为Q×(Vt∪{ε})×Q->N的映射。
定义2扩展确定性有限状态机(E-DFA)
扩展确定性有限状态机M是一个九元式,M={Q,P,N,Vt,ρ,ω,δ,q0,F},其中:
◆Q、Vt、δ、q0、F、P、N、ρ的含义与确定性有限状态机中对应参数含义相同;
◆ω表示状态转换函数与状态转换函数标识的映射函数,为Q×Vt×Q->N的映射。
定义3令P是一状态机M的状态集的子集,定义ρ(P)为:
同时搜索多个正则表达式时,传统方法一般通过选择运算先把各个子正则表达式结合成一个新的正则表达式,然后基于新得到的正则表达式完成搜索过程。这样做的不足之处在于:新得到的正则表达式中见不到组成它的各个子正则表达式的信息。因此,即使某个字符串匹配了新得到的正则表达式,也无法获知到底匹配了哪个子正则表达式,除非人工编写特定例程去记录这些信息。为了弥补这个不足,本发明在传统的五元有限状态机的基础上引入了两个新的参数P和ρ,相当于给有限状态机的每一个状态都加一个标签,该标签可以记录一些附加信息,如该状态属于原来的哪个子正则表达式等。
有限状态机在进行状态转换时有一个特点:即使正向的状态转换都是单值的,逆向回退时也可能是多值的。比如,对于状态转换关系δ(m,a)=q、δ(n,a)=q,状态m和n在遇到字符a时都转移到状态q,正向的状态转移都是单值的,可在状态q逆向回退时却有两条不同的回退路径。对于此类情况,试探每一条回退路径是可能的,但这样做一来速度太慢,二来选择的回退路径可能根本就是错误的。因此,有必要记下正向搜索时所用过的状态转换函数序列,这样,就可以唯一地确定正向搜索时的运行轨迹,从而可以有效的沿着该轨迹回退回去。本质上,这是一种以空间换时间的策略。因此,本发明给传统的有限状态机引入了另外两个参数N和ω,给每个状态转换函数都打上一个唯一标识(标签),所有这些标识(标签)就构成了集合N,ω定义了状态转换函数与状态转换函数标识(标签)的映射关系。
根据所基于状态机的不同形态(NFA或DFA),扩展后的状态机也包括两种:扩展非确定性有限状态机和扩展确定性有限状态机,分别记为E-NFA和E-DFA。
E-NFA和E-DFA是本发明所述的多正则表达式联合搜索的基础,下面的算法说明了如何构造E-NFA和E-DFA。
算法1:构造识别单个正则表达式的E-NFA
算法输入:一个单个的正则表达式Reg
算法输出:Reg对应的E-NFA=(Q,P,N,Vt∪{ε},ρ,ω,δ,q0,F)
算法步骤:
(1)给正则表达式Reg生成一个唯一的编号标识i;
(2)置集合P={i},置集合N为空集;
(3)以Thompson结构为基础,构造识别Reg的标准NFA,这样可以得到Q、Vt、δ,q0,F五个参数。(由正则表达式构造其对应的标准NFA的算法可参考编译原理教科书);
(4)对状态集合Q中的每一个状态q,加入ρ(q)=i;
(5)对每一个状态转换函数δ(p,a)=q,生成一个唯一的标识j,把j加入到集合N中,并且记ω(p,a,q)=j。
构造可以同时识别K个正则表达式的E-NFA时,首先按照算法1构造识别每个子正则表达式的E-NFAm(1≤m≤K,K>1),然后执行算法2。
算法2:构造同时识别K个正则表达式的E-NFA
算法输入:K个正则表达式对应的E-NFAm=(QmPm,Nm,Vtm∪{ε},ρm,ωm,δm,q0m,Fm)
算法输出:同时识别K个正则表达式的E-NFA=(Q,P,N,Vt∪{ε},ρ,ω,δ,q0,F)
算法步骤:
(1)增加一个新的始态s作为E-NFA的始态,从s到各个E-NFAm的始态分别引一条ε弧,置q0=s;增加一个新的终态e作为E-NFA的终态,从各个E-NFAm的终态分别引入一条ε弧到e。
(2)计算状态集Q。Q=Q1∪Q2∪…∪QK-1∪QK∪{s,e},即E-NFA的状态集为各个E-NFAm的状态集加上步骤(1)新生成的始态和终态。
(3)计算状态转换函数δ。各个E-NFAm的状态转换关系δm均为E-NFA中有效的δ关系,步骤(1)中新添加的状态转换关系也是E-NFA中有效的δ关系。
(4)计算状态标识集合P。P=P1∪P2∪…∪PK-1∪PK,即E-NFA的状态标识集合P为各个E-NFAm的状态标识集合的合集。
(5)计算状态与状态标识的映射函数ρ。ρ(s)=ρ(q01)∪ρ(q02)∪…∪ρ(q0k-1)∪ρ(q0k),即E-NFA的始态s的状态标识为各个E-NFAm的始态的状态标识之和。ρ(e)=ρ(F1)∪ρ(F2)∪…∪ρ(Fk-1)∪ρ(Fk),即E-NFA的终态e的状态标识为各个E-NFAm的终态集的状态标识之和。此外,各个E-NFAm中每个ρm关系都是E-NFA中的有效ρ关系。
(6)计算状态转换函数与状态转换函数标识的映射函数ω。各个E-NFAm中的每个ωm关系都是E-NFA中的有效ω关系;对步骤(1)新添加的每一个状态转换函数δ(p,a)=q,生成一个唯一的标识j,把j加入到集合Nnew中,并且记ω(p,a,q)=j。
(7)计算状态转换函数标识集合N。N=N1∪N2∪…∪NK-1∪NK∪Nnew,即E-NFA的状态转换函数标识集合N为各个E-NFAm的状态转换函数标识集与步骤(6)新生成的Nnew的合集。
(8)计算字母表Vt。Vt=Vt1∪Vt1∪…∪VtK-1∪VtK,即E-NFA的字母表为各个E-NFAm字母表的合集。
(9)计算终态集合F。E-NFA的终态集合F为各个E-NFAm终态集合之和加上步骤(1)新生成的终态e。
如果想获得更快的处理速度,可以对E-NFA做确定化处理,得到E-NFA对应的E-DFA,然后基于新产生的E-DFA来进行字符串搜索。算法3以经典的子集构造算法为骨架,给出了由E-NFA构造对应的E-DFA的方法。
算法3:由E-NFA构造E-DFA的确定化方法
算法输入:一个E-NFA=(Q,P,N,Vt∪{ε},ρ,ω,δ,q0,F)
算法输出:E-NFA对应的E-DFA=(Q’,P’,N’,Vt’,ρ’,ω’,δ’,q0’,F’)
算法步骤:
(1)初始化。
(1.1)计算ε-closure(q0)。初始时,ε-closure(q0)是Q’的唯一一个状态,并且把该状态标记为未处理状态;(ε-closure为状态的ε闭包计算操作)
(1.2)利用定义3计算ρ(ε-closure(q0));
(1.3)置P’=P,Vt’=Vt,q0’=ε-closure(q0)
(2)当Q’存在一个未处理的状态T,把状态T标识为已处理状态,检查字母表中的每一个字符在状态T下所能转移到的状态集合U,如果U不在集合Q’中,按照定义3计算ρ’(U),把U标记为未处理状态并加入到集合Q’中。不断重复本步骤直到Q’中的每一个状态都为已处理状态。
(3)对(2)中得到的每一个状态转换关系δ’(p,a)=q(p、q∈Q’,a∈Vt’),生成一个唯一的标识j,把j加入到集合N’中,并且记ω’(p,a,q)=j。
(4)把E-DFA中包含E-NFA终态的所有状态都加入E-DFA的终态集合F’。
上面介绍了能同时识别多个正则表达式的扩展有限状态机(E-NFA或E-DFA)的构造过程,下面进一步介绍如何基于扩展的有限状态机来同时搜索多个正则表达式。
(1)利用算法2或算法3构造同时识别多个正则表达式的E-NFA或E-DFA。
(2)初始化搜索过程。分配一个足够大的状态转换函数标识空间S,该空间中的每一个元素用来存放一个状态转换函数标识。用变量flag标识该空间的使用状况,置flag=0;记当前状态标识集合U=ρ(q0)(q0为自动机的始态)。
(3)正向搜索时,每当调用一次状态转换函数δ(p,a)=q,则自动调用下面三条语句:
U=U∩ρ(q)/*将新状态标识与已有状态标识集合
*的交集放入当前状态标识集合U中,
*用于确定目前匹配的正则表达式集合*/
S[flag]=ω(p,a,q) /*记录当前所用的状态转换函数,
*把其标识存入空间S*/
flag=flag+1/*空间的使用数目加1*/
(4)逆向回退字符时:
(4.1)如果只沿着某个特定的正则表达式回退,若该正则表达式的标识为i,执行如下步骤:记状态机当前状态为m,若i∈ρ(m),则可以回退字符,否则停止回退。若可以回退字符,则查找S[flag]对应的状态转换标识函数ω(p,a,m),然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1,即flag自动减1,释放标识空间。若继续回退字符,则重复本步骤,否则结束回退;
(4.2)如果不沿着某个特定的正则表达式回退,则执行如下步骤:记状态机当前状态为m,查找S[flag]对应的状态转换标识函数ω(p,a,m),然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1。若继续回退字符,则重复本步骤,否则结束回退。
上述步骤中的变量U记录了当前所匹配的状态标识的集合,根据这个参数,就可以获知该状态属于哪一个子正则表达式,从而可以获知哪个正则表达式得到了匹配。同时,借助于ρ、ω,可以有效记录正向的执行轨迹,从而可以方便的处理回退。这样,用户无需添加额外的处理例程,就可有效解决前文提及的串搜索中的两个常见问题。
需要指出的是:
(1)如果要基于E-DFA来搜索,不一定要把正则表达式先转换成E-NFA,然后再把E-NFA转换成E-DFA。实际上,存在由正则表达式直接构造其对应的DFA的算法,因此,理论上讲,可以由正则表达式直接构造其对应的E-DFA。
(2)上述给出的搜索执行流程只是一个总体框架,实际中可以做进一步的优化,比如,如果U中只包含一个元素,则后续步骤中不必再计算U=U∩ρ(q)。
以上对本发明的具体实施方式进行了详细的解说。对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。
Claims (4)
1.一种用在字符串搜索中的基于扩展有限状态机的多正则表达式联合搜索方法,所述扩展有限状态机包括有穷状态集合Q、输入字母表Vt、状态转换函数δ、始态q0、终止状态集F、状态标识集合P、状态与状态标识的映射函数ρ、状态转换函数的标识集合N和状态转换函数与状态转换函数标识的映射函数ω,其中状态标识集合P用于给状态机中的每一个状态加一个标识,状态与状态标识的映射函数ρ用于通过该映射函数计算出一个给定状态的状态标识,状态转换函数的标识集合N用于给状态机中的每一个状态转换函数引入一个唯一的标识,状态转换函数与状态转换函数标识的映射函数ω用于计算与一条状态转换函数对应的标识;
所述扩展有限状态机包括扩展非确定性有限状态机和扩展确定性有限状态机,所述扩展非确定性有限状态机中的状态转换函数允许是多值的,所述扩展确定性有限状态机不接受空串作为输入且状态转换函数是单值的;
该方法的特征在于:
(1)构造同时识别多个正则表达式的扩展非确定性有限状态机或扩展确定性有限状态机;
(2)分配一个足够大的状态转换函数标识空间S,该空间中的每一个元素用来存放一个状态转换函数标识,用变量flag标识该空间的使用状况,置flag=0,记当前状态标识集合U=ρ(q0);
(3)正向搜索时,每当调用一次状态转换函数δ(p,a)=q,则自动执行下面三个步骤:
U=U∩ρ(q),
S[flag]=ω(p,a,q),
flag=flag+1,
其中,δ(p,a)=q表示状态p在遇到字符a时转移到状态q;
(4)逆向回退字符时:
(4.1)如果只沿着某个正则表达式回退,且该正则表达式的标识为i,执行如下步骤:记状态机当前状态为m,若i∈ρ(m),则可以回退字符,否则停止回退,若可以回退字符,则查找状态转换函数标识空间对应的映射函数ω,然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1,释放标识空间,若继续回退字符,则重复本步骤,否则结束回退;
(4.2)如果不沿着某个正则表达式回退,则执行如下步骤:记状态机当前状态为m,查找状态转换函数标识空间对应的映射函数ω,然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-1,若继续回退字符,则重复本步骤,否则结束回退。
2.如权利要求1所述的基于扩展有限状态机的多正则表达式联合搜索方法,其特征在于:
所述步骤(1)中,构造同时识别多个正则表达式的扩展非确定性有限状态机E-NFA包括如下步骤:
(11)为多个子正则表达式的每一个分别构造识别单个正则表达式的扩展非确定性有限状态机E-NFAm;
(12)增加一个新的始态s作为E-NFA的始态,从s到步骤(11)中构造的各个E-NFAm的始态分别引一条ε弧,把s作为E-NFA的始态;增加一个新的终态e作为E-NFA的终态,从各个E-NFAm的终态分别引入一条ε弧到e;
(13)计算有穷状态集合Q:该有穷状态集合Q为各个E-NFAm的状态集加上步骤(12)新生成的始态和终态;
(14)计算状态转换函数δ:各个E-NFAm的状态转换函数均为E-NFA中有效的状态转换函数;
(15)计算状态标识集合P:该状态标识集合为各个E-NFAm的状态标识集合的合集;
(16)计算状态与状态标识的映射函数ρ:其中E-NFA的始态s的状态标识为各个E-NFAm的始态的状态标识之和,E-NFA的终态e的状态标识为各个E-NFAm的终态集合的状态标识之和,各个E-NFAm中每个映射函数关系都是E-NFA中有效的映射函数关系;
(17)计算状态转换函数与状态转换函数标识的映射函数ω:其中各个E-NFAm中的每个映射函数关系都是E-NFA中的有效映射函数关系;对步骤(12)新添加的每一个与ε弧相对应的状态转换函数,生成一个唯一的标识,将该标识加入到集合Nnew中,并且在映射函数中记录;
(18)计算状态转换函数的标识集合N:E-NFA的状态转换函数的标识集合为各个E-NFAm的状态转换函数标识集与步骤(17)新生成的Nnew的合集;
(19)计算输入字母表Vt:E-NFA的输入字母表为各个E-NFAm字母表的合集;
(20)计算终止状态集F:E-NFA的终止状态集为各个E-NFAm终态集合之和加上步骤(12)新生成的终态e。
3.如权利要求2所述的基于扩展有限状态机的多正则表达式联合搜索方法,其特征在于:
所述步骤(11)中,构造识别单个正则表达式的扩展非确定性有限状态机E-NFAm包括如下的步骤:
(111)给每一个正则表达式生成一个唯一的编号标识i;
(112)置扩展非确定性有限状态机的状态标识集合P={i},置状态转换函数标识集合N为空集;
(113)以Thompson结构为基础,构造识别单个正则表达式的标准非确定性有限状态机,得到扩展非确定性有限状态机的状态集合、字母表、状态转换函数、开始状态和结束状态;
(114)计算状态与状态标识的映射函数ρ,对状态集合中的每一个状态q,加入ρ(q)=i;
(115)计算状态转换函数的标识集合及状态转换函数与状态转换函数标识的映射函数,对每一个状态转换函数,生成一个唯一的标识,将该标识加入到标识集合中,并且在映射函数中记录。
4.如权利要求2所述的基于扩展有限状态机的多正则表达式联合搜索方法,其特征在于:
所述步骤(1)中,首先按照权利要求2所述的方法构造识别多个正则表达式的扩展非确定性有限状态机,然后使用确定化方法将所述扩展非确定性有限状态机构造成扩展确定性有限状态机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101143135A CN101174261B (zh) | 2006-11-03 | 2006-11-03 | 基于扩展有限状态机的多正则表达式联合搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101143135A CN101174261B (zh) | 2006-11-03 | 2006-11-03 | 基于扩展有限状态机的多正则表达式联合搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101174261A CN101174261A (zh) | 2008-05-07 |
CN101174261B true CN101174261B (zh) | 2010-04-14 |
Family
ID=39422778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101143135A Expired - Fee Related CN101174261B (zh) | 2006-11-03 | 2006-11-03 | 基于扩展有限状态机的多正则表达式联合搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101174261B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9305116B2 (en) * | 2010-04-20 | 2016-04-05 | International Business Machines Corporation | Dual DFA decomposition for large scale regular expression matching |
CN101957751B (zh) * | 2010-06-04 | 2013-07-24 | 福建星网锐捷网络有限公司 | 一种状态机的实现方法及装置 |
CN102142009B (zh) * | 2010-12-09 | 2013-08-14 | 华为技术有限公司 | 一种正则表达式匹配的方法及装置 |
CN104750725B (zh) * | 2013-12-30 | 2019-10-18 | 天津亿阳信通科技有限公司 | 一种基于非确定有限自动机的字符串搜索方法及其装置 |
US20160179073A1 (en) | 2014-12-19 | 2016-06-23 | Keysight Technologies, Inc. | Real Time Trigger Using A Finite State Machine Having A Counting State |
CN106997293A (zh) * | 2016-01-26 | 2017-08-01 | 上海大唐移动通信设备有限公司 | 有限状态机的实现方法及装置 |
CN105868113B (zh) * | 2016-03-31 | 2019-05-31 | 广州华多网络科技有限公司 | 字符串查找方法及装置 |
CN110517232A (zh) * | 2019-08-15 | 2019-11-29 | 武汉西尔塔信息技术有限公司 | 一种基于有限状态机的图像处理定位铸坯方法 |
CN110874426B (zh) * | 2019-10-28 | 2022-08-09 | 西安交通大学 | 一种基于模式分类的异构位分割状态机多模匹配方法 |
CN114896469A (zh) * | 2022-04-29 | 2022-08-12 | 阿里巴巴(中国)有限公司 | 一种正则表达式引擎的构造方法、装置、存储介质及设备 |
-
2006
- 2006-11-03 CN CN2006101143135A patent/CN101174261B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101174261A (zh) | 2008-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101174261B (zh) | 基于扩展有限状态机的多正则表达式联合搜索方法 | |
Caspard et al. | Finite ordered sets: concepts, results and uses | |
Corneil et al. | Dominating sets in perfect graphs | |
Equi et al. | Graphs cannot be indexed in polynomial time for sub-quadratic time string matching, unless SETH fails | |
Bertolazzi et al. | Computing orthogonal drawings with the minimum number of bends | |
CN105260354A (zh) | 一种基于关键词字典树构造的中文ac自动机工作方法 | |
Olariu et al. | Optimal parallel algorithms for problems modeled by a family of intervals | |
Weinand et al. | Research trends in combinatorial optimization | |
CN111949855A (zh) | 一种基于知识图谱的工程技经知识检索平台及其方法 | |
Jamison et al. | On a unique tree representation for P4-extendible graphs | |
CN111309979B (zh) | 一种基于邻居向量的RDF Top-k查询方法 | |
Shlyakhter | Generating effective symmetry-breaking predicates for search problems | |
CN104268629A (zh) | 一种基于先验信息和网络固有信息的复杂网络社区检测方法 | |
Berretta et al. | Enhancing the performance of memetic algorithms by using a matching-based recombination algorithm | |
Bertolazzi et al. | Computing orthogonal drawings with the minimum number of bends | |
CN104156462A (zh) | 基于元胞自动学习机的复杂网络社团挖掘方法 | |
CN115809708B (zh) | 中等规模有噪声量子计算机的量子位自适应映射方法 | |
Nakano et al. | A new approach to graph recognition and applications to distance-hereditary graphs | |
San Segundo et al. | Efficient search using bitboard models | |
Hu et al. | Connectivity Oracles for Predictable Vertex Failures | |
Huang et al. | Growing Like a Tree: Finding Trunks From Graph Skeleton Trees | |
Basili et al. | Diversity as width | |
CN104239397A (zh) | 一种新的领域知识表达和知识服务方法 | |
Abbes et al. | Structure based modular ontologies composition | |
Chen et al. | Scientific Knowledge Combination in Networks: New Perspectives on Analyzing Knowledge Absorption and Integration. |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100414 Termination date: 20111103 |