CN111159496B - 正则表达式nfa的构造方法及装置 - Google Patents
正则表达式nfa的构造方法及装置 Download PDFInfo
- Publication number
- CN111159496B CN111159496B CN201911415195.5A CN201911415195A CN111159496B CN 111159496 B CN111159496 B CN 111159496B CN 201911415195 A CN201911415195 A CN 201911415195A CN 111159496 B CN111159496 B CN 111159496B
- Authority
- CN
- China
- Prior art keywords
- character
- regular expression
- nfa
- current
- constructing
- 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
- 230000014509 gene expression Effects 0.000 title claims abstract description 163
- 238000010276 construction Methods 0.000 title claims abstract description 65
- 238000000034 method Methods 0.000 claims abstract description 65
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000006243 chemical reaction Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 12
- 238000007781 pre-processing Methods 0.000 claims description 6
- 230000001360 synchronised effect Effects 0.000 claims description 3
- 230000006978 adaptation Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9032—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种正则表达式NFA的构造方法及装置,所述方法包括:对正则表达式进行格式化处理;对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。也即本发明实施例采用遍历正则表达式的方式直接构造NFA,跨过了构造“语法树”的环节,实现了一种无需申请额外的“堆栈”空间的正则表达式NFA高效构造方法。本发明实施例在遍历正则表达式的同时,直接构造了NFA,无需中间结果“语法树”,因此,构造效率较高,程序执行时间短。此外,由于程序执行过程中无需额外申请与“正则串长度成正比”的“堆栈”内存空间,因此可以避免内存溢出风险,保障程序正常运行。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种正则表达式NFA的构造方法及装置。
背景技术
现有的正则表达式NFA(非确定有穷自动机,Non-deterministic finiteautomaton)构造方法,通常分为两个步骤:第一步,借助“堆栈(Stack)”构造“语法树(SyntaxTree)”,第二步,将语法树转换为NFA。
现有的正则表达式NFA构造方法存在如下问题:
由于堆栈的大小不受控制,因此可能会出现内存溢出问题,进而导致程序挂掉。同时,构造语法树也需要消耗一定的CPU。
发明内容
针对现有技术中的问题,本发明实施例提供一种正则表达式NFA的构造方法及装置。
具体地,本发明实施例提供了以下技术方案:
第一方面,本发明实施例提供了一种正则表达式NFA的构造方法,包括:
对正则表达式进行格式化处理;
对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
进一步地,所述对正则表达式进行格式化处理,具体包括:
对正则表达式进行头部预处理;以及,对正则表达式进行大小写适配。
进一步地,所述对正则表达式进行头部预处理,具体包括:
若正则匹配为搜索模式且正则表达式第一个字符不是^,则为所述正则表达式增加前缀.*。
进一步地,所述对正则表达式进行大小写适配,具体包括:
若正则匹配忽略大小写,则将正则表达式和待匹配字符串都转换为小写;若正则匹配不能忽略大小写,则将正则表达式保持不变。
进一步地,所述对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,具体包括:
创建当前自动机,对格式化处理后的正则表达式进行遍历处理,若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作;若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作;若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作;若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作。
进一步地,所述若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作,具体包括:
若当前字符为转义字符,则解析转义字符、16进制、8进制得到结果字符集;
若当前字符为非元字符,则解析为只包含非元字符的结果字符集;
若当前字符为任意字符.,则解析为包含所有字符的结果字符集;
若当前字符为区间值[],则解析为包含所有区间值的结果字符集;
若当前字符为默认情况,则解析为只包含单个字符的结果字符集;
若下一个字符为量词,则将当前结果转化为下一个自动机;否则,为当前自动机根据结果字符集添加跳转操作。
进一步地,所述若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作,具体包括:
若当前字符为*,则解析值为{0,+∞}的量词区间;
若当前字符为?,则解析值为{0,1}的量词区间;
若当前字符为+,则解析值为{1,+∞}的量词区间;
若当前字符为{,则解析值为{m,n}的量词区间;
针对下一个自动机执行量词操作repeat,并针对当前自动机和下一个自动机执行连接操作。
进一步地,所述若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作,具体包括:
若当前字符为|,则针对后续的正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行或操作。
进一步地,所述若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作,具体包括:
若当前字符为(,则针对处于小括号内正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行连接操作。
第二方面,本发明实施例还提供了一种正则表达式NFA的构造装置,包括:
格式化处理模块,用于对正则表达式进行格式化处理;
同步构造模块,用于对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述正则表达式NFA的构造方法的步骤。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述正则表达式NFA的构造方法的步骤。
由上面技术方案可知,本发明实施例提供的正则表达式NFA的构造方法及装置,由于对正则表达式进行了格式化处理,并对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,也即本发明实施例采用遍历正则表达式的方式直接构造NFA,跨过了构造“语法树”的环节,实现了一种无需申请额外的“堆栈”空间的正则表达式NFA高效构造方法。本发明实施例在遍历正则表达式的同时,直接构造了NFA,无需中间结果“语法树”,因此,构造效率较高,程序执行时间短。此外,由于程序执行过程中无需额外申请与“正则串长度成正比”的“堆栈”内存空间,因此可以避免内存溢出风险,保障程序正常运行。由此可知,本发明实施例采用遍历正则表达式直接构造NFA的方法,略过语法树步骤,直接构造了NFA,无需中间结果“语法树”,因此提升了构造速度,降低了内存使用,加快了正则表达式编译效率。因此可知,本发明实施例有效解决了正则表达式NFA构造时间慢以及消耗内存不可控的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的正则表达式NFA的构造方法的流程图;
图2为本发明一实施例提供的正则表达式NFA的同步构造过程示意图;
图3为本发明一实施例提供的正则表达式NFA的构造装置的结构示意图;
图4为本发明一实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
正如背景技术部分所述,现有的正则表达式NFA(非确定有穷自动机,Non-deterministic finite automaton)构造方法,通常分为两个步骤:第一步,借助“堆栈”构造“语法树”,第二步,将语法树转换为NFA。现有的正则表达式NFA构造方法存在的问题是:由于堆栈的大小不受控制,因此可能会出现内存溢出问题,进而导致程序挂掉。同时,构造语法树也需要消耗一定的CPU。针对该问题,本发明实施例提供了一种正则表达式NFA的构造方法及装置,本发明实施例跨过了构造“语法树”环节,实现了一种无需申请额外的“堆栈”空间的正则表达式NFA高效构造方法。下面将通过具体实施例对本发明提供的正则表达式NFA的构造方法及装置进行详细说明。
图1示出了本发明实施例提供的正则表达式NFA的构造方法的流程图。如图1所示,本发明实施例提供的正则表达式NFA的构造方法包括如下步骤:
步骤101:对正则表达式进行格式化处理;
在本步骤中,对正则表达式进行格式化处理是为了使得后续步骤102对格式化处理后的正则表达式进行遍历处理,进而根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。需要说明的是,对正则表达式进行格式化处理的目的是将正则表达式中的字符转化成规范化的、格式化的字符,使得能够根据正则表达式中每个字符所属的字符类型直接同步构造非确定有穷自动机NFA。例如,在本步骤中,对正则表达式进行格式化处理可以包括:头部预处理和大小写适配。
在本步骤中,头部预处理可以指:判定是否需要在正则表达式头部增加“前缀.*”,若是,则在正则表达式头部增加“前缀.*”。需要说明的是,正则匹配模式包含两种:搜索和匹配。“搜索”表示字符串是否包含符合正则表达式的子串,“匹配”表示整个字符串是否符合正则表达式。如果正则匹配为“搜索”模式,并且正则第一个字符不是“^”(字符^用于限定开头),则需要为此正则表达式增加“前缀.*”。例如:搜索模式的正则表达式“abc”,在头部增加“前缀.*”得到的正则表达式为“.*abc”。
在本步骤中,大小写适配可以指:判断正则匹配是否忽略大小写,如果正则匹配忽略大小写,则需要将“正则表达式”和“待匹配字符串”都预先转换为“小写”。如果正则匹配不能忽略大小写,则正则表达式保持不变。例如:忽略大小写的正则表达式“^aBcD”,处理之后结果为“^abcd”。需要说明的是,大小写适配用于处理“正则匹配是否忽略大小写”需求。
步骤102:对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
在本步骤中,遍历正则表达式,同步构造NFA,无需创建“语法树”。具体来说,如图2所示的NFA的同步构造过程示意图,首先执行步骤S1:创建“当前自动机为nowNfa”,然后执行步骤S2:遍历正则表达式,根据“当前字符nowChar”所属的字符类型(字符转换、量词、或、小括号),分别执行对应操作:
I、字符转换
如果“当前字符nowChar”为“转义字符”,则解析“转义字符”、“16进制”、“8进制”得到“结果字符集resultCharSet”。
如果“当前字符nowChar”为“非元字符”,则解析为只包含“非元字符”的“结果字符集resultCharSet”。
如果“当前字符nowChar”为“任意字符.”,则解析为包含“所有字符”的“结果字符集resultCharSet”。
如果“当前字符nowChar”为“区间值[]”,则解析为包含“所有区间值”的“结果字符集resultCharSet”。
默认情况,解析为只包含“单个字符”的“结果字符集resultCharSet”。
如果“下一个字符nextChar”为“量词”,则将当前结果转化为“下一个自动机nextNfa”。否则,为“当前自动机为nowNfa”根据“结果字符集resultCharSet”添加跳转操作。
II、量词
如果“当前字符nowChar”为“*”,则解析值为“{0,+∞}”的“量词区间QuantifierInterval”。
如果“当前字符nowChar”为“?”,则解析值为“{0,1}”的“量词区间QuantifierInterval”。
如果“当前字符nowChar”为“+”,则解析值为“{1,+∞}”的“量词区间QuantifierInterval”。
如果“当前字符nowChar”为“{”,则解析值为“{m,n}”的“量词区间QuantifierInterval”。
首先针对“下一个自动机nextNfa”执行量词操作repeat,然后针对“当前自动机为nowNfa”和“下一个自动机nextNfa”执行连接操作connect。
III、或
如果“当前字符nowChar”为“|”,则针对“后续的正则表达式子串”构造“单独的自动机newNfa”。
针对“当前自动机为nowNfa”和“单独的自动机newNfa”执行或操作or。
IV、小括号
如果“当前字符nowChar”为“(”,则针对“处于小括号内正则表达式子串”构造“单独的自动机newNfa”。
针对“当前自动机为nowNfa”和“单独的自动机newNfa”执行连接操作connect。
需要说明的是,本实施例提供的正则表达式NFA的构造方法,具体如下优势:
I、执行时间短:遍历正则表达式的同时,直接构造了NFA,无需中间结果“语法树”,效率较高,程序具体较短的执行时间。
II、内存可控:程序执行过程中无需额外申请与“正则串长度成正比”的“堆栈”内存空间,避免内存溢出风险,保障程序正常运行。
由上面描述可知,本实施例提供的正则表达式NFA的高效构造方法,无需开辟额外的“堆栈(Stack)”空间,进而避免出现内存溢出错误,无需创建“语法树(SyntaxTree)”,进而加快了构造速度。
由上面技术方案可知,本发明实施例提供的正则表达式NFA的构造方法,由于对正则表达式进行了格式化处理,并对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,也即本发明实施例采用遍历正则表达式的方式直接构造NFA,跨过了构造“语法树”的环节,实现了一种无需申请额外的“堆栈”空间的正则表达式NFA高效构造方法。本发明实施例在遍历正则表达式的同时,直接构造了NFA,无需中间结果“语法树”,因此,构造效率较高,程序执行时间短。此外,由于程序执行过程中无需额外申请与“正则串长度成正比”的“堆栈”内存空间,因此可以避免内存溢出风险,保障程序正常运行。由此可知,本发明实施例采用遍历正则表达式直接构造NFA的方法,略过语法树步骤,直接构造了NFA,无需中间结果“语法树”,因此提升了构造速度,降低了内存使用,加快了正则表达式编译效率。因此可知,本发明实施例有效解决了正则表达式NFA构造时间慢以及消耗内存不可控的问题。
基于上述实施例的内容,在本实施例中,所述步骤101对正则表达式进行格式化处理,具体可通过如下方式实现:
对正则表达式进行头部预处理;以及,对正则表达式进行大小写适配。
在本实施例中,对正则表达式进行头部预处理是指:若正则匹配为搜索模式且正则表达式第一个字符不是指定字符,如“^”,则为所述正则表达式增加前缀“.*”。例如:搜索模式的正则表达式“abc”,在头部增加“前缀.*”得到的正则表达式为“.*abc”。
在本实施例中,对正则表达式进行大小写适配是指:若正则匹配忽略大小写,则将正则表达式和待匹配字符串都转换为小写;若正则匹配不能忽略大小写,则将正则表达式保持不变。例如:忽略大小写的正则表达式“^aBcD”,处理之后结果为“^abcd”。需要说明的是,大小写适配用于处理“正则匹配是否忽略大小写”需求。
基于上述实施例的内容,在本实施例中,所述对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,具体包括:
创建当前自动机,对格式化处理后的正则表达式进行遍历处理,若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作;若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作;若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作;若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作。
基于上述实施例的内容,在本实施例中,所述若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作,具体包括:
若当前字符为转义字符,则解析转义字符、16进制、8进制得到结果字符集;
若当前字符为非元字符,则解析为只包含非元字符的结果字符集;
若当前字符为任意字符.,则解析为包含所有字符的结果字符集;
若当前字符为区间值[],则解析为包含所有区间值的结果字符集;
若当前字符为默认情况,则解析为只包含单个字符的结果字符集;
若下一个字符为量词,则将当前结果转化为下一个自动机;否则,为当前自动机根据结果字符集添加跳转操作。
基于上述实施例的内容,在本实施例中,所述若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作,具体包括:
若当前字符为*,则解析值为{0,+∞}的量词区间;
若当前字符为?,则解析值为{0,1}的量词区间;
若当前字符为+,则解析值为{1,+∞}的量词区间;
若当前字符为{,则解析值为{m,n}的量词区间;
针对下一个自动机执行量词操作repeat,并针对当前自动机和下一个自动机执行连接操作。
基于上述实施例的内容,在本实施例中,所述若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作,具体包括:
若当前字符为|,则针对后续的正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行或操作。
基于上述实施例的内容,在本实施例中,所述若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作,具体包括:
若当前字符为(,则针对处于小括号内正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行连接操作。
由上面描述可知,本实施例提供的正则表达式NFA的高效构造方法,无需开辟额外的“堆栈”空间,进而避免出现内存溢出错误,无需创建“语法树”,进而加快了构造速度。
由上面技术方案可知,本发明实施例提供的正则表达式NFA的构造方法,由于对正则表达式进行了格式化处理,并对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,也即本发明实施例采用遍历正则表达式的方式直接构造NFA,跨过了构造“语法树”的环节,实现了一种无需申请额外的“堆栈”空间的正则表达式NFA高效构造方法。本发明实施例在遍历正则表达式的同时,直接构造了NFA,无需中间结果“语法树”,因此,构造效率较高,程序执行时间短。此外,由于程序执行过程中无需额外申请与“正则串长度成正比”的“堆栈”内存空间,因此可以避免内存溢出风险,保障程序正常运行。由此可知,本发明实施例采用遍历正则表达式直接构造NFA的方法,略过语法树步骤,直接构造了NFA,无需中间结果“语法树”,因此提升了构造速度,降低了内存使用,加快了正则表达式编译效率。因此可知,本发明实施例有效解决了正则表达式NFA构造时间慢以及消耗内存不可控的问题。
图3示出了本发明实施例提供的正则表达式NFA的构造装置的结构示意图。如图3所示,本发明实施例提供的正则表达式NFA的构造装置包括:格式化处理模块21和同步构造模块22,其中:
格式化处理模块21,用于对正则表达式进行格式化处理;
同步构造模块22,用于对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
进一步地,所述格式化处理模块21,具体用于:
对正则表达式进行头部预处理;以及,对正则表达式进行大小写适配。
进一步地,所述格式化处理模块在对正则表达式进行头部预处理时,具体用于:
若正则匹配为搜索模式且正则表达式第一个字符不是^,则为所述正则表达式增加前缀.*。
进一步地,所述格式化处理模块21在对正则表达式进行大小写适配时,具体用于:
若正则匹配忽略大小写,则将正则表达式和待匹配字符串都转换为小写;若正则匹配不能忽略大小写,则将正则表达式保持不变。
进一步地,所述同步构造模块22,具体用于:
创建当前自动机,对格式化处理后的正则表达式进行遍历处理,若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作;若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作;若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作;若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作。
进一步地,所述同步构造模块22在执行与“字符转换”对应的第一NFA构造操作时,具体用于:
若当前字符为转义字符,则解析转义字符、16进制、8进制得到结果字符集;
若当前字符为非元字符,则解析为只包含非元字符的结果字符集;
若当前字符为任意字符.,则解析为包含所有字符的结果字符集;
若当前字符为区间值[],则解析为包含所有区间值的结果字符集;
若当前字符为默认情况,则解析为只包含单个字符的结果字符集;
若下一个字符为量词,则将当前结果转化为下一个自动机;否则,为当前自动机根据结果字符集添加跳转操作。
进一步地,所述同步构造模块22在执行与“量词”对应的第二NFA构造操作时,具体用于:
若当前字符为*,则解析值为{0,+∞}的量词区间;
若当前字符为?,则解析值为{0,1}的量词区间;
若当前字符为+,则解析值为{1,+∞}的量词区间;
若当前字符为{,则解析值为{m,n}的量词区间;
针对下一个自动机执行量词操作repeat,并针对当前自动机和下一个自动机执行连接操作。
进一步地,所述同步构造模块22在执行与“或”对应的第三NFA构造操作时,具体用于:
若当前字符为|,则针对后续的正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行或操作。
进一步地,所述同步构造模块22在执行与“小括号”对应的第四NFA构造操作时,具体用于:
若当前字符为(,则针对处于小括号内正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行连接操作。
由于本发明实施例提供的正则表达式NFA的构造装置,可以用于执行上述实施例所述的正则表达式NFA的构造方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
基于相同的发明构思,本发明又一实施例提供了一种电子设备,参见图4,所述电子设备具体包括如下内容:处理器401、存储器402、通信接口403和通信总线404;
其中,所述处理器401、存储器402、通信接口403通过所述通信总线404完成相互间的通信;
所述处理器401用于调用所述存储器402中的计算机程序,所述处理器执行所述计算机程序时实现上述正则表达式NFA的构造方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:对正则表达式进行格式化处理;对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
基于相同的发明构思,本发明又一实施例提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述正则表达式NFA的构造方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述过程:对正则表达式进行格式化处理;对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA。
可以理解的是,所述计算机程序可以执行的细化功能和扩展功能可参照上面实施例的描述。
此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的正则表达式NFA的构造方法。
此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
此外,在本发明中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (12)
1.一种正则表达式NFA的构造方法,其特征在于,包括:
对正则表达式进行格式化处理;
对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA;其中,所述根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,包括:根据每个字符所属的字符类型,对所述字符类型为字符转换的字符、所述字符类型为量词的字符、所述字符类型为或的字符以及所述字符类型为小括号的字符,分别执行对应操作。
2.根据权利要求1所述的正则表达式NFA的构造方法,其特征在于,所述对正则表达式进行格式化处理,具体包括:
对正则表达式进行头部预处理;以及,对正则表达式进行大小写适配。
3.根据权利要求2所述的正则表达式NFA的构造方法,其特征在于,所述对正则表达式进行头部预处理,具体包括:
若正则匹配为搜索模式且正则表达式第一个字符不是^,则为所述正则表达式增加前缀.*。
4.根据权利要求2所述的正则表达式NFA的构造方法,其特征在于,所述对正则表达式进行大小写适配,具体包括:
若正则匹配忽略大小写,则将正则表达式和待匹配字符串都转换为小写;若正则匹配不能忽略大小写,则将正则表达式保持不变。
5.根据权利要求1所述的正则表达式NFA的构造方法,其特征在于,所述对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,具体包括:
创建当前自动机,对格式化处理后的正则表达式进行遍历处理,若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作;若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作;若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作;若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作。
6.根据权利要求5所述的正则表达式NFA的构造方法,其特征在于,所述若当前字符所属的字符类型为字符转换,则执行与字符转换对应的第一NFA构造操作,具体包括:
若当前字符为转义字符,则解析转义字符、16进制、8进制得到结果字符集;
若当前字符为非元字符,则解析为只包含非元字符的结果字符集;
若当前字符为任意字符.,则解析为包含所有字符的结果字符集;
若当前字符为区间值[],则解析为包含所有区间值的结果字符集;
若当前字符为默认情况,则解析为只包含单个字符的结果字符集;
若下一个字符为量词,则将当前结果转化为下一个自动机;否则,为当前自动机根据结果字符集添加跳转操作。
7.根据权利要求5所述的正则表达式NFA的构造方法,其特征在于,所述若当前字符所属的字符类型为量词,则执行与量词对应的第二NFA构造操作,具体包括:
若当前字符为*,则解析值为{0,+∞}的量词区间;
若当前字符为?,则解析值为{0,1}的量词区间;
若当前字符为+,则解析值为{1,+∞}的量词区间;
若当前字符为{,则解析值为{m,n}的量词区间;
针对下一个自动机执行量词操作repeat,并针对当前自动机和下一个自动机执行连接操作。
8.根据权利要求5所述的正则表达式NFA的构造方法,其特征在于,所述若当前字符所属的字符类型为或,则执行与或对应的第三NFA构造操作,具体包括:
若当前字符为|,则针对后续的正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行或操作。
9.根据权利要求5所述的正则表达式NFA的构造方法,其特征在于,所述若当前字符所属的字符类型为小括号,则执行与小括号对应的第四NFA构造操作,具体包括:
若当前字符为(,则针对处于小括号内正则表达式子串构造单独的自动机;
针对当前自动机和单独的自动机执行连接操作。
10.一种正则表达式NFA的构造装置,其特征在于,包括:
格式化处理模块,用于对正则表达式进行格式化处理;
同步构造模块,用于对格式化处理后的正则表达式进行遍历处理,根据每个字符所属的字符类型同步构造非确定有穷自动机NFA;其中,所述根据每个字符所属的字符类型同步构造非确定有穷自动机NFA,包括:根据每个字符所属的字符类型,对所述字符类型为字符转换的字符、所述字符类型为量词的字符、所述字符类型为或的字符以及所述字符类型为小括号的字符,分别执行对应操作。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至9任一项所述正则表达式NFA的构造方法的步骤。
12.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至9任一项所述正则表达式NFA的构造方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911415195.5A CN111159496B (zh) | 2019-12-31 | 2019-12-31 | 正则表达式nfa的构造方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911415195.5A CN111159496B (zh) | 2019-12-31 | 2019-12-31 | 正则表达式nfa的构造方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111159496A CN111159496A (zh) | 2020-05-15 |
CN111159496B true CN111159496B (zh) | 2024-01-23 |
Family
ID=70560075
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911415195.5A Active CN111159496B (zh) | 2019-12-31 | 2019-12-31 | 正则表达式nfa的构造方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111159496B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114896469A (zh) * | 2022-04-29 | 2022-08-12 | 阿里巴巴(中国)有限公司 | 一种正则表达式引擎的构造方法、装置、存储介质及设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104426909A (zh) * | 2013-08-30 | 2015-03-18 | 凯为公司 | 为具有高级特征的正则表达式图样生成非确定有限自动机(nfa)图形 |
CN104714995A (zh) * | 2013-08-30 | 2015-06-17 | 凯为公司 | 用于遍历为具有高级特征的正则表达式图样生成的非确定有限自动机(nfa)的系统和方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7818311B2 (en) * | 2007-09-25 | 2010-10-19 | Microsoft Corporation | Complex regular expression construction |
US9203805B2 (en) * | 2011-11-23 | 2015-12-01 | Cavium, Inc. | Reverse NFA generation and processing |
-
2019
- 2019-12-31 CN CN201911415195.5A patent/CN111159496B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104426909A (zh) * | 2013-08-30 | 2015-03-18 | 凯为公司 | 为具有高级特征的正则表达式图样生成非确定有限自动机(nfa)图形 |
CN104714995A (zh) * | 2013-08-30 | 2015-06-17 | 凯为公司 | 用于遍历为具有高级特征的正则表达式图样生成的非确定有限自动机(nfa)的系统和方法 |
Non-Patent Citations (1)
Title |
---|
邵瑛 ; 陆月明 ; .基于优化正则表达式的文本告警信息的提取和分析.微型电脑应用.2010,(05),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111159496A (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6922538B2 (ja) | Api学習 | |
US8250464B2 (en) | Parsing a markup language document | |
US7251777B1 (en) | Method and system for automated structuring of textual documents | |
WO2019143541A1 (en) | Code suggestion based on machine learning | |
CN106547527B (zh) | 一种JavaScript文件构建方法及装置 | |
US10055399B2 (en) | Method and system for linear generalized LL recognition and context-aware parsing | |
FI115416B (fi) | Rakenteellisen datan jäsennys | |
EP3891599B1 (en) | Code completion of method parameters with machine learning | |
CN112379917A (zh) | 浏览器兼容性提升方法、装置、设备及存储介质 | |
US11243750B2 (en) | Code completion with machine learning | |
CN111159496B (zh) | 正则表达式nfa的构造方法及装置 | |
CN110362317B (zh) | 一种代码转换方法、装置和存储介质 | |
CN110058849A (zh) | 流程图的生成方法、装置、计算机设备以及存储介质 | |
CN115576603B (zh) | 一种获取代码片段中的变量值的方法及装置 | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
CN114416107A (zh) | 翻译逻辑的方法、装置、存储介质和设备 | |
CN106663094B (zh) | 用于线性广义ll识别和上下文感知解析的方法和系统 | |
EP3942404B1 (en) | Code completion for overloaded methods | |
CN112949283B (zh) | 文本处理方法、装置、非易失性存储介质及处理器 | |
CN112068816B (zh) | 防止js全局污染的方法、存储介质 | |
CN116644134A (zh) | 一种互联互通语句的生成方法及装置 | |
CN115878120A (zh) | 代码生成方法、装置及存储介质 | |
CN114840858A (zh) | 漏洞测试方法以及装置 | |
KR101565557B1 (ko) | 스트리밍 xml 문서 파싱 시스템 및 방법 | |
CN114791810A (zh) | 数据转换方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Room 332, 3 / F, Building 102, 28 xinjiekouwei street, Xicheng District, Beijing 100088 Applicant after: QAX Technology Group Inc. Applicant after: Qianxin Wangshen information technology (Beijing) Co.,Ltd. Address before: Room 332, 3 / F, Building 102, 28 xinjiekouwei street, Xicheng District, Beijing 100088 Applicant before: QAX Technology Group Inc. Applicant before: LEGENDSEC INFORMATION TECHNOLOGY (BEIJING) Inc. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |