本技術(shù)屬于互聯(lián)網(wǎng),尤其涉及一種正則表達(dá)式匹配方法、裝置、設(shè)備、存儲介質(zhì)及程序產(chǎn)品。
背景技術(shù):
1、現(xiàn)有的用于文本搜索以及網(wǎng)絡(luò)數(shù)據(jù)流的規(guī)則匹配技術(shù)主要是基于正則表達(dá)式的自動機(jī)引擎技術(shù),其核心理論基礎(chǔ)為形式化語言與自動機(jī)理論中正則表達(dá)式與自動機(jī)的等價性原理。主流實(shí)現(xiàn)方法為依據(jù)正則文法先將正則表達(dá)式解析為抽象語法樹(abstractsyntax?tree,ast),再根據(jù)抽象語法樹構(gòu)造nfa(非確定型有窮自動機(jī),non-deterministicfinite?automata)/dfa(確定型有窮自動機(jī),deterministic?finite?automata)自動機(jī)引擎進(jìn)行正則表達(dá)式的匹配。此類正則表達(dá)式匹配方案在復(fù)雜重復(fù)語法等復(fù)雜正則語法場景下的匹配效率會嚴(yán)重下降。并且,上述方案實(shí)現(xiàn)主要是基于單一的自動機(jī)引擎進(jìn)行實(shí)現(xiàn),針對不同形式的語法規(guī)則缺乏有效的針對性優(yōu)化?;诖?,業(yè)界仍然亟待一種新型的用戶正則表達(dá)式匹配方案,以在復(fù)雜語法規(guī)則場景下仍能夠?qū)崿F(xiàn)對輸入語料的快速正則表達(dá)式匹配。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供一種正則表達(dá)式匹配方法、裝置、設(shè)備、存儲介質(zhì)及程序產(chǎn)品,能夠更為快速、準(zhǔn)確地實(shí)現(xiàn)正則表達(dá)式匹配。
2、第一方面,本技術(shù)實(shí)施例提供一種正則表達(dá)式匹配方法,該正則表達(dá)式匹配方法包括:
3、基于預(yù)設(shè)字符串集合,從待匹配語料中提取出n個目標(biāo)字符串,n為正整數(shù);預(yù)設(shè)字符串集合包括n個目標(biāo)字符串,預(yù)設(shè)字符串集合預(yù)先基于原始非確定型有窮自動機(jī)nfa狀態(tài)轉(zhuǎn)移表確定得到;原始nfa狀態(tài)轉(zhuǎn)移表預(yù)先基于正則表達(dá)式集合構(gòu)建得到;
4、基于與n個目標(biāo)字符串中各個目標(biāo)字符串對應(yīng)的局部狀態(tài)轉(zhuǎn)移表,生成與待匹配預(yù)料對應(yīng)的目標(biāo)狀態(tài)轉(zhuǎn)移表;
5、基于目標(biāo)狀態(tài)轉(zhuǎn)移表,對待匹配語料進(jìn)行正則表達(dá)式匹配,得到待匹配預(yù)料的正則表達(dá)式匹配結(jié)果;
6、其中,局部狀態(tài)轉(zhuǎn)移表為確定型有窮自動機(jī)dfa狀態(tài)轉(zhuǎn)移表或者nfa狀態(tài)轉(zhuǎn)移表;局部狀態(tài)轉(zhuǎn)移表基于原始nfa狀態(tài)轉(zhuǎn)移表壓縮得到。
7、在一些可能的實(shí)施方式中,在基于與n個目標(biāo)字符串中各個目標(biāo)字符串對應(yīng)的局部狀態(tài)轉(zhuǎn)移表,生成與待匹配預(yù)料對應(yīng)的目標(biāo)狀態(tài)轉(zhuǎn)移表之前,該正則表達(dá)式匹配方法還包括:
8、基于原始nfa狀態(tài)轉(zhuǎn)移表,確定第一目標(biāo)字符串的第一有效運(yùn)行路徑;第一目標(biāo)字符串為n個目標(biāo)字符串中的任一目標(biāo)字符串;
9、將第一有效運(yùn)行路徑確定為第一目標(biāo)字符串對應(yīng)的局部狀態(tài)轉(zhuǎn)移表。
10、在一些可能的實(shí)施方式中,基于原始nfa狀態(tài)轉(zhuǎn)移表,確定第一目標(biāo)字符串的第一有效運(yùn)行路徑,包括:
11、將第一目標(biāo)字符串在目標(biāo)原始狀態(tài)轉(zhuǎn)移表中對應(yīng)的狀態(tài)標(biāo)記為預(yù)激活狀態(tài);目標(biāo)原始狀態(tài)轉(zhuǎn)移表為原始nfa狀態(tài)轉(zhuǎn)移表,或者,基于原始nfa狀態(tài)轉(zhuǎn)移表轉(zhuǎn)移得到的dfa狀態(tài)轉(zhuǎn)移表;
12、將目標(biāo)原始狀態(tài)轉(zhuǎn)移表中通往預(yù)激活狀態(tài)的起始狀態(tài)的路徑、以及由預(yù)激活狀態(tài)的結(jié)束狀態(tài)出發(fā)可達(dá)的路徑標(biāo)記為第一有效運(yùn)行路徑。
13、在一些可能的實(shí)施方式中,基于預(yù)設(shè)字符串集合,從待匹配語料中提取出n個目標(biāo)字符串,包括:
14、基于預(yù)設(shè)字符串集合,利用中央處理器的單指令多數(shù)據(jù)流simd指令集從待匹配語料中提取出n個目標(biāo)字符串。
15、在一些可能的實(shí)施方式中,目標(biāo)字符串為連續(xù)的、且所包含字符的數(shù)量不超過預(yù)設(shè)閾值的字符串。
16、在一些可能的實(shí)施方式中,在基于預(yù)設(shè)字符串集合,從待匹配語料中提取出n個目標(biāo)字符串之前,該正則表達(dá)式匹配方法還包括:
17、基于正則表達(dá)式集合,構(gòu)建抽象語法樹;
18、基于抽象語法樹,構(gòu)建原始nfa狀態(tài)轉(zhuǎn)移表。
19、在一些可能的實(shí)施方式中,原始nfa狀態(tài)轉(zhuǎn)移表中包括m個重復(fù)子節(jié)點(diǎn),m為非負(fù)整數(shù);m個重復(fù)子節(jié)點(diǎn)中的任一重復(fù)子節(jié)點(diǎn)包含一個子nfa狀態(tài)轉(zhuǎn)移表;基于抽象語法樹,構(gòu)建原始nfa狀態(tài)轉(zhuǎn)移表,包括:
20、分別將m個不同的目標(biāo)正則表達(dá)式中的重復(fù)語法部分構(gòu)建為與m個重復(fù)子節(jié)點(diǎn)一一對應(yīng)的子nfa狀態(tài)轉(zhuǎn)移表;目標(biāo)正則表達(dá)式為正則表達(dá)式集合中包括重復(fù)語法的正則表達(dá)式。
21、在一些可能的實(shí)施方式中,在基于抽象語法樹,構(gòu)建原始nfa狀態(tài)轉(zhuǎn)移表之后,該正則表達(dá)式匹配方法還包括:
22、通過對目標(biāo)原始狀態(tài)轉(zhuǎn)移表進(jìn)行圖分析,提取得到目標(biāo)原始狀態(tài)轉(zhuǎn)移表中的連續(xù)確定字符串;目標(biāo)原始狀態(tài)轉(zhuǎn)移表為原始nfa狀態(tài)轉(zhuǎn)移表,或者,基于原始nfa狀態(tài)轉(zhuǎn)移表轉(zhuǎn)移得到的dfa狀態(tài)轉(zhuǎn)移表;
23、基于目標(biāo)原始狀態(tài)轉(zhuǎn)移表中的連續(xù)確定字符串,生成預(yù)設(shè)字符串集合。
24、在一些可能的實(shí)施方式中,預(yù)設(shè)字符串集合包括第一字符串子集,以及與k個目標(biāo)重復(fù)子節(jié)點(diǎn)一一對應(yīng)的k個第二字符串子集;m個重復(fù)子節(jié)點(diǎn)中包括k個目標(biāo)重復(fù)子節(jié)點(diǎn),目標(biāo)重復(fù)子節(jié)點(diǎn)所包含的子nfa狀態(tài)轉(zhuǎn)移表用于匹配連續(xù)確定字符串。
25、基于相同的發(fā)明構(gòu)思,第二方面,本技術(shù)實(shí)施例提供了一種正則表達(dá)式匹配裝置,該正則表達(dá)式匹配裝置包括:
26、第一提取模塊,用于基于預(yù)設(shè)字符串集合,從待匹配語料中提取出n個目標(biāo)字符串,n為正整數(shù);預(yù)設(shè)字符串集合包括n個目標(biāo)字符串,預(yù)設(shè)字符串集合預(yù)先基于原始非確定型有窮自動機(jī)nfa狀態(tài)轉(zhuǎn)移表確定得到;原始nfa狀態(tài)轉(zhuǎn)移表預(yù)先基于正則表達(dá)式集合構(gòu)建得到;
27、第一生成模塊,用于基于與n個目標(biāo)字符串中各個目標(biāo)字符串對應(yīng)的局部狀態(tài)轉(zhuǎn)移表,生成與待匹配預(yù)料對應(yīng)的目標(biāo)狀態(tài)轉(zhuǎn)移表;
28、第一得到模塊,用于基于目標(biāo)狀態(tài)轉(zhuǎn)移表,對待匹配語料進(jìn)行正則表達(dá)式匹配,得到待匹配預(yù)料的正則表達(dá)式匹配結(jié)果;
29、其中,局部狀態(tài)轉(zhuǎn)移表為確定型有窮自動機(jī)dfa狀態(tài)轉(zhuǎn)移表或者nfa狀態(tài)轉(zhuǎn)移表;局部狀態(tài)轉(zhuǎn)移表基于原始nfa狀態(tài)轉(zhuǎn)移表壓縮得到。
30、第三方面,本技術(shù)實(shí)施例提供了一種正則表達(dá)式匹配設(shè)備,該正則表達(dá)式匹配設(shè)備包括:
31、處理器以及存儲有計算機(jī)程序指令的存儲器;
32、所述處理器執(zhí)行所述計算機(jī)程序指令時實(shí)現(xiàn)如上述本技術(shù)實(shí)施例中任意一項(xiàng)提供的正則表達(dá)式匹配方法。
33、第四方面,本技術(shù)實(shí)施例提供了一種計算機(jī)存儲介質(zhì),該計算機(jī)可讀存儲介質(zhì)上存儲有計算機(jī)程序指令,所述計算機(jī)程序指令被處理器執(zhí)行時實(shí)現(xiàn)如上述本技術(shù)實(shí)施例中任意一項(xiàng)提供的正則表達(dá)式匹配方法。
34、第五方面,本技術(shù)實(shí)施例提供了一種計算機(jī)程序產(chǎn)品,計算機(jī)程序產(chǎn)品中的指令由電子設(shè)備的處理器執(zhí)行時,使得所述電子設(shè)備執(zhí)行如上述本技術(shù)實(shí)施例中任意一項(xiàng)提供的正則表達(dá)式匹配方法。
35、本技術(shù)實(shí)施例提供的一種正則表達(dá)式匹配方法、裝置、設(shè)備、存儲介質(zhì)及程序產(chǎn)品,通過利用預(yù)設(shè)字符串集合從待匹配語料中提取出n個目標(biāo)字符串,該預(yù)設(shè)字符串集合預(yù)先基于原始nfa狀態(tài)轉(zhuǎn)移表確定得到。然后,再基于與n個目標(biāo)字符串中各個目標(biāo)字符串對應(yīng)的局部狀態(tài)轉(zhuǎn)移表,生成與待匹配預(yù)料對應(yīng)的目標(biāo)狀態(tài)轉(zhuǎn)移表,該局部狀態(tài)轉(zhuǎn)移表基于原始nfa狀態(tài)轉(zhuǎn)移表壓縮得到。如此,基于生成的目標(biāo)狀態(tài)轉(zhuǎn)移表來對待匹配語料進(jìn)行正則表達(dá)式匹配,能夠快速匹配得到待匹配預(yù)料的正則表達(dá)式匹配結(jié)果。
36、通過上述描述可知,本技術(shù)實(shí)施例的一種正則表達(dá)式匹配方法、裝置、設(shè)備、存儲介質(zhì)及程序產(chǎn)品,通過提取待匹配語料的字符串特征,以確定待匹配語料中字符串對應(yīng)的壓縮后的局部狀態(tài)轉(zhuǎn)移表,并將局部狀態(tài)轉(zhuǎn)移表合并生成得到與待匹配語料對應(yīng)的目標(biāo)狀態(tài)轉(zhuǎn)移表,即相當(dāng)于對原始的nfa狀態(tài)轉(zhuǎn)移表先進(jìn)行動態(tài)壓縮簡化后再運(yùn)行自動機(jī)進(jìn)行正則規(guī)則的匹配,可有效降低在大量規(guī)則場景下自動機(jī)在無效狀態(tài)上跳轉(zhuǎn)的運(yùn)行時開銷,大幅提高自動機(jī)的運(yùn)行時性能,從而能夠更為快速、準(zhǔn)確地實(shí)現(xiàn)正則表達(dá)式匹配。