專(zhuān)利名稱(chēng):正則表達(dá)式匹配的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,尤其涉及一種正則表達(dá)式匹配的方法及裝置。
技術(shù)背景目前,越來(lái)越多的系統(tǒng)釆用正則表達(dá)式取代字符串來(lái)描述特征,所說(shuō)的正 則表達(dá)式是一種形式語(yǔ)言,由常量和算子組成,常量和算子分別指示元字符的 集合和在這些集合上的運(yùn)算。和字符串相比,正則表達(dá)式能夠非常靈活、簡(jiǎn)單、有效地描述各種特征,使得特征具有動(dòng)態(tài)特性,適合各種動(dòng)態(tài)搜索。例如b, ab, aab, aaab, aaaab,...這一系歹iJ6勺字;f尋串凈爭(zhēng)征可k乂簡(jiǎn)單i也用一個(gè)正貝'J表達(dá)式alD來(lái)表示(這里*表示0到任意多個(gè),3*即表示字符3可以重復(fù)0到任意多次)。在腳本語(yǔ)言Perl兼容的正則表達(dá)式(PCRE, Perl Compatible Regular Expression,)規(guī)范中有一類(lèi)擴(kuò)展語(yǔ)法稱(chēng)為反向參考或反向引用(Back Reference),反向引用是指對(duì)以前已經(jīng)匹配上的子表達(dá)式的引用,引用的對(duì) 象是子表達(dá)式匹配的部分,而不是表達(dá)式本身,因此反向引用必須滿(mǎn)足兩個(gè)條 件1)在前面已經(jīng)出現(xiàn)過(guò);2)能夠匹配上指定的正則表達(dá)式。舉例來(lái)說(shuō),在 "([a-c])(de)x\1x\2,,這個(gè)正則表達(dá)式中,有兩個(gè)圓括號(hào)包括的部分"([a-c])和 (de)"(其中a-c表示a或b或c),這兩個(gè)括號(hào)中的內(nèi)容是指發(fā)生反向引用時(shí), 需要引用的對(duì)象;而"\1和\2"分別表示對(duì)([a-c)和(de)進(jìn)行一次反向引用,即 檢查輸入字符串中當(dāng)前位置開(kāi)始的輸入字符是否能夠匹配([a-c])或(de)。可以注 意到,在特定的輸入條件下,括號(hào)中的子表達(dá)式就是特定的字符串,由于反向 引用要求引用的部分必須是已經(jīng)出現(xiàn)過(guò)的內(nèi)容,因此,adexgx^§、 bdex乜x^、 cdexsx^這樣的輸入字符串就能夠匹配上給定的正則表達(dá)式(下劃線(xiàn)部分可以滿(mǎn)足反向引用定義中給出的兩個(gè)條件);而字符串a(chǎn)dexbx^就無(wú)法匹配上正則 表達(dá)式,這是因?yàn)閎雖然可以匹配上a-c,但是在前面并沒(méi)有出現(xiàn)過(guò),就不能滿(mǎn) 足條件1。另外,在現(xiàn)有的Perl5.10和PCRE7.0中,"V'符號(hào)后跟一個(gè)^t字有二義性 即可以表示反向引用,又可以表示八進(jìn)制數(shù)。可以用'、g《數(shù)字F這種形式來(lái)明確 表示反向引用,為簡(jiǎn)化表述,后續(xù)簡(jiǎn)單地用"\"+數(shù)字來(lái)表示反向引用?,F(xiàn)有技術(shù)中,將判斷輸入內(nèi)容中是否包含正則表達(dá)式所表示規(guī)則的操作稱(chēng) 為正則表達(dá)式匹配, 一般是用輸入字符串來(lái)表示正則表達(dá)式匹配系統(tǒng)的輸入?yún)?數(shù),用匹配結(jié)果來(lái)表示正則表達(dá)式匹配系統(tǒng)的輸出結(jié)果?,F(xiàn)有的正則表達(dá)式匹 配方法一般有兩大類(lèi) 一類(lèi)基于非確定性有限狀態(tài)機(jī)(NFA, Non-deterministic Finite Automation);另一類(lèi)基于確定性有限狀態(tài)沖幾(DFA, Deterministic Finite Automation) 。 NF財(cái)同一個(gè)輸入字符允許有多個(gè)不同的轉(zhuǎn)移,而DF財(cái)同一 個(gè)輸入字符只能有唯一的轉(zhuǎn)移,因此NFA在一個(gè)轉(zhuǎn)移不匹配輸入字符的情況 下,需要回退嘗試另外的轉(zhuǎn)移,只有在所有轉(zhuǎn)移都不匹配時(shí)才認(rèn)為不匹配;而 DFA只要在轉(zhuǎn)移不匹配輸入字符時(shí),就可以直接認(rèn)為不匹配。所以DFA的匹配 速度快,但DFA并不支持反向引用;NFA雖然支持反向引用,但是存在最壞情 況下匹配性能很差的問(wèn)題?,F(xiàn)有技術(shù)中,在一些諸如實(shí)時(shí)網(wǎng)絡(luò)檢測(cè)等對(duì)性能要求較高的應(yīng)用中,常采 用現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA, Field Programmable Gate Array)或?qū)S眉?電路(ASIC, Application Specific Integrated Circuit)等器件來(lái)實(shí)現(xiàn)正則表達(dá) 式匹配系統(tǒng)。由于NFA的不確定性,使其很難在這些器件上實(shí)現(xiàn),因此目前在 器件上實(shí)現(xiàn)正則表達(dá)式匹配一般都是基于DFA來(lái)進(jìn)行的,但是由于DFA并不支 持反向引用,所以影響了 D FA匹配系統(tǒng)的規(guī)則處理能力。發(fā)明內(nèi)容本發(fā)明實(shí)施例提供了 一種正則表達(dá)式匹配的方法及裝置,能夠使DFA匹配提高了DFA匹配系統(tǒng)的規(guī)則處理能力,具有很高的實(shí) 用價(jià)值。本發(fā)明實(shí)施例提供了一種正則表達(dá)式匹配的方法,包括 在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí),并在所述狀態(tài)節(jié)點(diǎn)上^:殳置引用標(biāo)識(shí);如果當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效,則將當(dāng)前輸入的 字符存^ft到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;如果當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效,則將當(dāng)前輸入的字符和所述引用標(biāo) 識(shí)對(duì)應(yīng)的引用緩存中保存的字符進(jìn)行比較,判斷該當(dāng)前輸入的字符是否匹配。本發(fā)明實(shí)施例還提供了一種正則表達(dá)式匹配的裝置,包括DFA狀態(tài)信息設(shè)置單元,用于在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī) DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上"^殳置位置標(biāo)識(shí), 并在狀態(tài)節(jié)點(diǎn)上^:置引用標(biāo)識(shí);引用緩存單元,用于在當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效 時(shí),將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;反向引用匹配單元,用于在當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效時(shí),將當(dāng)前輸 入的字符和所述? 1用標(biāo)識(shí)對(duì)應(yīng)的引用緩存單元中所保存的字符進(jìn)行比較,判斷 該當(dāng)前輸入的字符是否匹配。由上述所提供的技術(shù)方案可以看出,在將正則表達(dá)式編譯為確定性有限狀 態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置有位置 標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè)置有引用標(biāo)識(shí);這樣,如果當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn) 轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效,則將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引 用緩存中;如果當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效,則將當(dāng)前輸入的字符和所述 引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存中保存的字符進(jìn)行比較,判斷該當(dāng)前輸入的字符是否匹配。上述的技術(shù)方案就可以使DFA匹配系統(tǒng)支持反向引用,同時(shí)對(duì)現(xiàn)有的存 儲(chǔ)結(jié)構(gòu)和引擎架構(gòu)的改動(dòng)都較小,從而提高了DFA匹配系統(tǒng)的規(guī)則處理能力, 具有很高的實(shí)用價(jià)值。
圖1為本發(fā)明實(shí)施例1所提供正則表達(dá)式匹配方法的流程示意圖; 圖2為本發(fā)明實(shí)施例1所舉的第 一實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配 過(guò)程示意圖;圖3為本發(fā)明實(shí)施例1所舉的第二實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配 過(guò)程示意圖;圖4為本發(fā)明實(shí)施例1所舉的第三實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配 過(guò)程示意圖;圖5為本發(fā)明實(shí)施例1所舉的第四實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配 過(guò)程示意圖;圖6為本發(fā)明實(shí)施例1所舉的第五實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配 過(guò)程示意圖;圖7為本發(fā)明實(shí)施例2所提供正則表達(dá)式匹配裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了 一種正則表達(dá)式匹配的方法及裝置。在將正則表達(dá)式 編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在相關(guān)DFA的狀態(tài)上加入位置標(biāo)識(shí)和 引用標(biāo)識(shí)的信息;在進(jìn)行匹配操作時(shí),如果遇到位置標(biāo)識(shí)有效的狀態(tài),那么就 根據(jù)位置標(biāo)識(shí)將當(dāng)前輸入的字符寫(xiě)入該位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;如果遇到 引用標(biāo)識(shí)有效的狀態(tài),那么就根據(jù)該引用標(biāo)識(shí)找到相應(yīng)的引用緩存,將當(dāng)前輸 入的字符串和相應(yīng)引用緩存中保存的字符串進(jìn)行比較,判斷該當(dāng)前輸入的字符 是否匹配。通過(guò)上述技術(shù)方案的實(shí)施,就可以使DFA匹配系統(tǒng)支持反向引用,從而提高了DFA匹配系統(tǒng)的規(guī)則處理能力,具有很高的實(shí)用價(jià)值。實(shí)施例1:為更好的描述本發(fā)明實(shí)施例,現(xiàn)結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施 例進(jìn)行說(shuō)明,如圖1所示為本實(shí)施例1所提供正則表達(dá)式匹配方法的流程示意 圖,所述方法包括步驟11:在確定性有限狀態(tài)機(jī)DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置 位置標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上{殳置引用標(biāo)識(shí)。在該步驟中,在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,可 以在DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上i殳置位置標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè) 置引用標(biāo)識(shí)。具體來(lái)說(shuō),可以找出該正則表達(dá)式中的每個(gè)反向引用,并將所述 反向引用的引用值作為發(fā)生反向引用的DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí);然后再找 出每個(gè)反向引用所包括的內(nèi)容,將該引用標(biāo)識(shí)作為所包括內(nèi)容在DFA中的前一 個(gè)狀態(tài)節(jié)點(diǎn)或前一個(gè)狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上的位置標(biāo)識(shí)。上述位置標(biāo)識(shí)指的是對(duì)一個(gè)正則表達(dá)式中出現(xiàn)的被引用的括號(hào)部分按照 某種順序進(jìn)行的重新編碼,實(shí)際上就是為需要引用比較的各個(gè)內(nèi)容部分指定一 個(gè)身份編號(hào),對(duì)于不需要引用的部分,是不需要進(jìn)行位置標(biāo)識(shí)的。上述的引用 標(biāo)識(shí)指的是對(duì)一個(gè)正則表達(dá)式中出現(xiàn)的需要引用的部分,例如用"\" +數(shù)字所 表示的部分,按照某種順序進(jìn)行的重新編碼,實(shí)際上就是指定需要和之前出現(xiàn) 的某個(gè)括號(hào)中的內(nèi)容進(jìn)行匹配比較。在具體實(shí)現(xiàn)過(guò)程中,可按如下方式來(lái)進(jìn)行設(shè)置首先對(duì)正則表達(dá)式進(jìn)行掃描,找出所述正則表達(dá)式中的每個(gè)反向引用;設(shè)置第一指定值和第二指定值; 其中,所述第一指定值小于所述第二指定值;將所找出的每個(gè)反向引用的引用 值組成一個(gè)集合,為所述集合中的每個(gè)元素按順序分配一個(gè)從第三指定值開(kāi)始 的連續(xù)引用編號(hào);遍歷所述集合,用所述引用編號(hào)加上所述第一指定值來(lái)替換 每個(gè)反向引用所引用的內(nèi)容前的括號(hào),并作為非確定性有限狀態(tài)機(jī)NFA轉(zhuǎn)移邊 上的字符;將所述引用編號(hào)加上所述第二指定值來(lái)替換所述正則表達(dá)式中的每個(gè)反向引用,并作為NFA轉(zhuǎn)移邊上的字符;在NFA向DFA進(jìn)行轉(zhuǎn)換時(shí),如果轉(zhuǎn) 移邊上的字符大于所述第一指定值且小于所述第二指定值,則將字符減去所述 第一指定值得到的值作為位置標(biāo)識(shí)增加到DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移 邊上;如果轉(zhuǎn)移邊上的字符大于所述第二指定值,則將字符減去所述第二指定 值得到的值作為引用標(biāo)識(shí)增加到DFA的狀態(tài)節(jié)點(diǎn)上。其中,上述的第一指定值和第二指定值是為了將反向引用部分和其引用的 括號(hào)(引用的內(nèi)容)轉(zhuǎn)換為特殊字符,這樣可以在后繼轉(zhuǎn)換成DFA的過(guò)程中使 用;上述的第三指定值可以設(shè)置成任意的數(shù)字,例如為了方便表述,可將其設(shè) 置為從1開(kāi)始;除上述所舉出的實(shí)例外,在實(shí)際應(yīng)用過(guò)程中,也可以采用其他 類(lèi)似方法或步驟來(lái)實(shí)現(xiàn),這并不影響本發(fā)明的實(shí)質(zhì)內(nèi)容。另外,在上述設(shè)置過(guò)程中,還可以根據(jù)反向引用的引用值大小對(duì)其順序編用標(biāo)識(shí)。舉例來(lái)說(shuō),以A(BCIDE)(A+B)([a-c])FVIG。這個(gè)正則表達(dá)式為例,\1表示 在這個(gè)位置需要反向引用(BCIDE)中的內(nèi)容,\3表示在這個(gè)位置需要反向引用 ([a-c])中的內(nèi)容;然后將引用值1和3重新順序編碼得到引用標(biāo)識(shí)分別為1和2; 而(A+B)不會(huì)被引用,故不需要進(jìn)行位置標(biāo)識(shí)。之所以需要進(jìn)行這樣處理,是 因?yàn)榧僭O(shè)一個(gè)正則表達(dá)式中包含有100個(gè)括號(hào)部分,而只需要對(duì)第1個(gè)括號(hào)和第 100個(gè)括號(hào)進(jìn)行反向引用,如果不對(duì)反向引用的括號(hào)部分進(jìn)行重新標(biāo)識(shí),那么 我們需要設(shè)置10O個(gè)緩存和原來(lái)的每個(gè)括號(hào)進(jìn)行對(duì)應(yīng),而經(jīng)過(guò)重新順序編碼后, 我們就只需要設(shè)置2個(gè)緩存,這樣就可以大大節(jié)省所需要的資源。在經(jīng)過(guò)上述的設(shè)置操作之后,就可以進(jìn)行如下的匹配操作。步驟12:根據(jù)所設(shè)置的位置標(biāo)識(shí)和引用標(biāo)識(shí),將當(dāng)前輸入字符和反向引用 部分的內(nèi)容進(jìn)行匹配才喿作。在該步驟中,在經(jīng)過(guò)上述步驟11的設(shè)置后,就可以根據(jù)所設(shè)置的位置標(biāo)識(shí)ii和引用標(biāo)識(shí),將當(dāng)前輸入字符和反向引用部分的內(nèi)容進(jìn)行匹配操作。具體來(lái)說(shuō), 如果當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效,則將當(dāng)前輸入的字符
存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;如果當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有
效,則將當(dāng)前輸入的字符和所述引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存中保存的字符進(jìn)行比 較,判斷該當(dāng)前輸入的字符是否匹配。
上述位置標(biāo)識(shí)有效可以根據(jù)實(shí)際需要來(lái)進(jìn)行定義,例如當(dāng)位置標(biāo)識(shí)不為O 時(shí),可以定義該位置標(biāo)識(shí)有效,當(dāng)位置標(biāo)識(shí)為0時(shí),則定義為無(wú)效;同樣的, 當(dāng)引用標(biāo)識(shí)不為0時(shí),也可以定義該引用標(biāo)識(shí)有效,當(dāng)引用標(biāo)識(shí)為O時(shí),則定義 為無(wú)效。
為了更好的描述匹配過(guò)程,下面以具體的實(shí)例來(lái)進(jìn)行說(shuō)明,例如以正則表 達(dá)式A(BCIDE)(A+B)([a-c])R1 GV3所對(duì)應(yīng)的DFA狀態(tài)機(jī)為例,如圖2所示為所舉 的第一實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配過(guò)程示意圖,圖中狀態(tài)節(jié)點(diǎn)上 方框中的數(shù)值為位置標(biāo)識(shí)和引用標(biāo)識(shí),為了區(qū)分兩者,在引用標(biāo)識(shí)的數(shù)值前加 了 "\";在狀態(tài)節(jié)點(diǎn)1、 2、 3、 6、 8和9上存在相關(guān)狀態(tài)的變化,即在該狀態(tài) 節(jié)點(diǎn)上需要保存位置標(biāo)識(shí)或需要保存引用標(biāo)識(shí)。
圖2中狀態(tài)節(jié)點(diǎn)1, 2, 3, 6的位置標(biāo)識(shí)不為0,表示位置標(biāo)識(shí)有效,也就 是說(shuō)在這些狀態(tài)上,如果輸入字符有效,就需要將當(dāng)前輸入的字符寫(xiě)入到相應(yīng) 的緩存中,因此,輸入的字符DE被保存到緩存1中,字符C被保存在緩存2中; 狀態(tài)節(jié)點(diǎn)8和9的引用標(biāo)識(shí)不為0,表示引用標(biāo)識(shí)有效,也就是說(shuō)在8和9發(fā)生了 反向引用,需要檢查當(dāng)前輸入的字符是否能夠和對(duì)應(yīng)緩存中的內(nèi)容相匹配,例 如在狀態(tài)節(jié)點(diǎn)8就需要將當(dāng)前輸入的兩個(gè)字符DE和緩存1中所存儲(chǔ)的內(nèi)容進(jìn)行 比較,判斷該當(dāng)前輸入的字符是否匹配,從而完成相應(yīng)的反向引用匹配操作。
另外,對(duì)于正則表達(dá)式中出現(xiàn)括號(hào)嵌套的情況,需要考慮發(fā)生嵌套的括號(hào) 都被反向引用的情況,在編譯DFA狀態(tài)機(jī)時(shí),內(nèi)層括號(hào)包括的部分所對(duì)應(yīng)的狀 態(tài)上應(yīng)該標(biāo)注出所有發(fā)生嵌套的位置標(biāo)識(shí);同時(shí)在匹配時(shí),如果遇到狀態(tài)節(jié)點(diǎn)上有多個(gè)位置標(biāo)識(shí)不為0,那么就需要將下一個(gè)字符同時(shí)寫(xiě)入到這些位置標(biāo)識(shí) 所對(duì)應(yīng)的緩存中。
例如,以正則表達(dá)式A((BI[a-c])D(EF))GVim3所對(duì)應(yīng)的DFA狀態(tài)機(jī)為例, 如圖3所示為所舉的第二實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配過(guò)程示意圖, 圖中在字符A后面緊跟的左括號(hào)和EF前的左括號(hào)分別標(biāo)識(shí)為1和2,表示 (BI[a-c])D(EF))中出現(xiàn)的字符需要記錄到緩存1中,而(EF)中出現(xiàn)的字符不僅 要記錄到緩存1中,還需要記錄到緩存2中。在對(duì)反向引用部分進(jìn)行匹配時(shí),在 狀態(tài)節(jié)點(diǎn)8上,就將當(dāng)前輸入的字符BDEF和緩存1中存儲(chǔ)的內(nèi)容進(jìn)行匹配;在 狀態(tài)節(jié)點(diǎn)9上,就將當(dāng)前輸入的字符EF和緩存2中存儲(chǔ)的內(nèi)容進(jìn)行匹配。
再考慮另一個(gè)在狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí)的例子,如圖4所示為所 舉的第三實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配過(guò)程示意圖,圖中正則表達(dá)式 為A(BI(CD))EVIF。,左邊的示意圖是在狀態(tài)節(jié)點(diǎn)上增加位置標(biāo)識(shí)而生成的 DFA,假如輸入的字符串為"ABEBFB",按照左邊的DFA,是能夠匹配的;但 是第4個(gè)字符B雖然能夠匹配VI所引用的(BI(CD)),但第6個(gè)字符已卻無(wú)法匹配\2 所引用的(CD),因此是錯(cuò)誤的。造成錯(cuò)誤的原因是在狀態(tài)節(jié)點(diǎn)上標(biāo)記多個(gè)位置 標(biāo)識(shí)時(shí),無(wú)法區(qū)分下一個(gè)輸入字符應(yīng)該存放到哪個(gè)緩存中。
而在上述圖4右邊的示意圖中,可以將位置標(biāo)識(shí)設(shè)置在狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊 上,這樣就可以明確轉(zhuǎn)移邊上的字符應(yīng)該存》文到哪個(gè)緩存中,此時(shí)輸入字符 "ABEBFB"無(wú)法匹配,但是輸入字符"ACDECDFCD"是可以匹配的。
另外,當(dāng)同一狀態(tài)上存在多個(gè)反向引用時(shí),還可以在所述狀態(tài)節(jié)點(diǎn)上設(shè)置 多個(gè)引用標(biāo)識(shí)所發(fā)生的順序。舉例來(lái)說(shuō),以正則表達(dá)式 A(BCIDE)(A+B)([a-c])F、3Vl所對(duì)應(yīng)的匹配過(guò)程為例,在輸入字符F后跳轉(zhuǎn)到的 狀態(tài)上需要連續(xù)發(fā)生兩次反向引用操作,第1次需要引用([a-c]),第2次需要引 用(BCIDE)。那么此時(shí)除了需要在狀態(tài)上標(biāo)記兩個(gè)引用標(biāo)識(shí)之外,還需要記錄 下兩個(gè)引用標(biāo)識(shí)所發(fā)生的順序,具體可以采用如下的方式來(lái)進(jìn)行
13例如,可以在狀態(tài)節(jié)點(diǎn)上按照反向引用出現(xiàn)的先后順序,依次為所述反向 引用分配由小到大的引用標(biāo)識(shí),并設(shè)定數(shù)值小的引用標(biāo)識(shí)優(yōu)先進(jìn)^f亍處理。如圖
5所示為所舉的第四實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹配過(guò)程示意圖,圖5 中所對(duì)應(yīng)的正則表達(dá)式為A(BCIDE)(A+B)([a-c])FV3";在生成DFA時(shí),為出 現(xiàn)在前面的反向引用分配較小的引用標(biāo)識(shí),并規(guī)定編號(hào)較小的引用緩存優(yōu)先訪(fǎng) 問(wèn)。即為"\3"分配引用標(biāo)識(shí)\1,為"\1"分配引用標(biāo)識(shí)\2;在反向引用匹配時(shí), 引用標(biāo)識(shí)為VI的優(yōu)先處理,即在狀態(tài)節(jié)點(diǎn)8優(yōu)先將所輸入的字符"c"和緩存1 中保存的字符進(jìn)行比較,然后再對(duì)引用標(biāo)識(shí)為\2的部分進(jìn)行處理,即將所輸入 的字符"DE"和緩存2中保存的字符進(jìn)行比較。
除上述設(shè)置方式外,還可以在狀態(tài)節(jié)點(diǎn)上按照反向引用的引用值大小,依 次為所述反向引用分配由小到大的引用標(biāo)識(shí),并在所分配的引用標(biāo)識(shí)上記錄各 反向引用發(fā)生的先后順序。
舉例來(lái)說(shuō),如圖6所示為所舉的第五實(shí)例中DFA狀態(tài)機(jī)對(duì)輸入字符串的匹 配過(guò)程示意圖,圖中所對(duì)應(yīng)的正則表達(dá)式為A(BCIDE)(A+B)([a-c])F、3VI;在 生成DFA時(shí),除了為反向引用分配引用標(biāo)識(shí)外,在出現(xiàn)多個(gè)反向引用的狀態(tài)上 記錄各反向引用所發(fā)生的先后順序,即在圖6中的狀態(tài)節(jié)點(diǎn)8上同時(shí)記錄下反向 引用標(biāo)識(shí)和發(fā)生的先后順序。在狀態(tài)節(jié)點(diǎn)8上進(jìn)行反向引用匹配時(shí),首先對(duì)先 發(fā)生的引用標(biāo)識(shí)為\2的進(jìn)行處理,即將當(dāng)前輸入的字符"c"和緩存2中保存的 字符進(jìn)行比較;然后再對(duì)后發(fā)生的引用標(biāo)識(shí)為VI的進(jìn)行處理,即將當(dāng)前輸入的 字符"DE"和緩存1中保存的字符進(jìn)行比較。
值得注意的是,上述過(guò)程是為了說(shuō)明同 一個(gè)狀態(tài)上有多個(gè)反向引用的情 況,在上述所舉出的例子中,位置標(biāo)識(shí)可以標(biāo)注在狀態(tài)節(jié)點(diǎn),也可以標(biāo)注在狀 態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上,具體可以根據(jù)實(shí)際的規(guī)則情況來(lái)進(jìn)行處理,但這并不影響 本發(fā)明的實(shí)質(zhì)內(nèi)容。
綜上所述,通過(guò)以上方法實(shí)施例1的技術(shù)方案,就可以使DFA匹配系統(tǒng)支持反向引用,同時(shí)對(duì)現(xiàn)有的存儲(chǔ)結(jié)構(gòu)和引擎架構(gòu)的改動(dòng)都較小,從而提高了
DFA匹配系統(tǒng)的規(guī)則處理能力,具有很高的實(shí)用價(jià)值。
另外,在本實(shí)施例1的步驟12中,將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí) 對(duì)應(yīng)的引用緩存中,具體可以有如下的存儲(chǔ)方式
方式1:將當(dāng)前輸入的字符本身直接保存到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存
中;
方式2:將當(dāng)前輸入字符的存儲(chǔ)位置保存到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用援存
中;
方式3:將需要引用的當(dāng)前輸入字符串的起始字符和結(jié)束字符的存儲(chǔ)位置 對(duì)保存到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用i爰存中;
方式4:將需要引用的當(dāng)前輸入字符串的起始字符和該輸入字符串的總長(zhǎng) 度保存到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中。
而在判斷該當(dāng)前輸入的字符是否匹配的過(guò)程中,比較過(guò)程還可以采用同步 方式或異步方式來(lái)進(jìn)行,具體來(lái)說(shuō)
同步方式就是在判斷該當(dāng)前輸入的字符匹配成功后,再對(duì)所輸入的下一個(gè) 字符進(jìn)行操作。在具體實(shí)現(xiàn)過(guò)程中,同步方式比較適合反向引用部分的長(zhǎng)度較 短的情況,此時(shí)引用緩存的保存方式可以考慮采用上述方式1和方式2。
異步方式就是先跳過(guò)進(jìn)行匹配判斷的該當(dāng)前輸入的字符,對(duì)所輸入的下一 個(gè)字符進(jìn)行操作,再根據(jù)該當(dāng)前輸入的字符的匹配結(jié)果來(lái)決定是否繼續(xù)進(jìn)行后 繼的匹配操作。在具體實(shí)現(xiàn)過(guò)程中,異步方式比較適合反向引用部分的長(zhǎng)度較 長(zhǎng)的情況,此時(shí)引用緩存的保存方式可以考慮采用上述方式3和方式4。
實(shí)施例2:本發(fā)明實(shí)施例2提供了一種正則表達(dá)式匹配的裝置,如圖7所示 為本實(shí)施例2所提供裝置的結(jié)構(gòu)示意圖,所述裝置包括DFA狀態(tài)信息設(shè)置單元 71、引用緩存單元72和反向引用匹配單元73,其中
所述DFA狀態(tài)信息設(shè)置單元71用于在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo) 識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè)置引用標(biāo)識(shí)。具體進(jìn)行設(shè)置的方式見(jiàn)以上方法實(shí)施例1 中所述。
所述引用緩存單元72用于在當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo) 識(shí)有效時(shí),將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中。具體進(jìn) 行存儲(chǔ)的方式見(jiàn)以上方法實(shí)施例1中所述。
所述反向引用匹配單元73用于在當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效時(shí),將當(dāng) 前輸入的字符和所述引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存單元中所保存的字符進(jìn)行比較, 判斷該當(dāng)前輸入的字符是否匹配。具體對(duì)當(dāng)前輸入的字符進(jìn)行匹配的方式見(jiàn)以 上方法實(shí)施例1中所述。
另外,在所述DFA狀態(tài)信息設(shè)置單元71中還可包括引用標(biāo)識(shí)設(shè)置模塊711 和位置標(biāo)識(shí)設(shè)置模塊712,其中
所述引用標(biāo)識(shí)設(shè)置模塊711用于找出正則表達(dá)式中的每個(gè)反向引用,并將 所述反向引用的引用值作為發(fā)生反向引用的DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)。
所述位置標(biāo)識(shí)設(shè)置模塊712用于找出所述每個(gè)反向引用所包括的內(nèi)容,將 所述引用標(biāo)識(shí)作為所包括內(nèi)容在DFA中的前一個(gè)狀態(tài)節(jié)點(diǎn)或前一個(gè)狀態(tài)節(jié)點(diǎn) 的轉(zhuǎn)移邊上的位置標(biāo)識(shí)。
另外,為了標(biāo)注同一狀態(tài)上多個(gè)反向引用所發(fā)生的順序,在所述DFA狀態(tài) 信息設(shè)置單元71中還可包括順序設(shè)置模塊713,該順序設(shè)置模塊713用于當(dāng)同 一狀態(tài)上存在多個(gè)反向引用時(shí),在所述狀態(tài)節(jié)點(diǎn)上設(shè)置多個(gè)引用標(biāo)識(shí)所發(fā)生的 順序。具體進(jìn)行設(shè)置的方式見(jiàn)以上方法實(shí)施例1中所述。
上述引用緩存單元72有多種存儲(chǔ)字符的方式,具體包括直接保存當(dāng)前輸 入的字符本身;或保存當(dāng)前輸入字符的存儲(chǔ)位置;或保存當(dāng)前輸入字符的起始 字符和結(jié)束字符的存儲(chǔ)位置對(duì);或保存當(dāng)前輸入字符的起始字符和該輸入字符 的總長(zhǎng)度。另夕卜,在上述裝置中還可包括輸入字符串緩存單元74,該輸入字符串緩存 單元74用于保存需要進(jìn)行匹配的輸入字符串,并將其傳送給所述反向引用匹配 單元73和所述引用緩存單元72。如果DFA匹配引擎是用在報(bào)文檢測(cè)的場(chǎng)合,那 么上述輸入字符串緩存單元74所保存的就是從前端模塊所接收的數(shù)據(jù)報(bào)文。
上述正則表達(dá)式匹配的裝置可集成設(shè)置于確定性有限狀態(tài)機(jī)DFA匹配引 擎中;也可設(shè)置成單獨(dú)的功能實(shí)體,與DFA匹配引擎保持連接關(guān)系。
另外,上述實(shí)施例2所述的裝置是以FPGA為例進(jìn)行說(shuō)明的,但在ASIC等 其他器件中也是能夠?qū)崿F(xiàn)的,此處就不再贅述。
值得注意的是,上述裝置實(shí)施例中,所包括的各個(gè)單元只是按照功能邏輯 進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另夕卜, 各功能單元的具體名稱(chēng)也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù) 范圍。
另外,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例1中的全部或部 分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,相應(yīng)的程序可以存儲(chǔ)于一種計(jì) 算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
綜上所述,本發(fā)明實(shí)施例可以使DFA匹配系統(tǒng)支持反向引用,同時(shí)對(duì)現(xiàn)有 的存儲(chǔ)結(jié)構(gòu)和引擎架構(gòu)的改動(dòng)都較小,從而提高了DFA匹配系統(tǒng)的規(guī)則處理能 力,具有很高的實(shí)用價(jià)值。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局 限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明實(shí)施例揭露的技術(shù)范圍內(nèi), 可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明 的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1、一種正則表達(dá)式匹配的方法,其特征在于,所述方法包括在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí),并在所述狀態(tài)節(jié)點(diǎn)上設(shè)置引用標(biāo)識(shí);如果當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效,則將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;如果當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效,則將當(dāng)前輸入的字符和所述引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存中保存的字符進(jìn)行比較,判斷該當(dāng)前輸入的字符是否匹配。
2、 如權(quán)利要求1所述的方法,其特征在于,所述在所述DFA的狀態(tài)節(jié)點(diǎn)或 狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè)置引用標(biāo)識(shí),具體包括找出正則表達(dá)式中的每個(gè)反向引用,并將所述反向引用的引用值作為發(fā)生 反向引用的確定性有限狀態(tài)機(jī)DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí);找出所述每個(gè)反向引用所包括的內(nèi)容,將所述引用標(biāo)識(shí)作為所包括內(nèi)容在 DFA中的前一個(gè)狀態(tài)節(jié)點(diǎn)或前一個(gè)狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上的位置標(biāo)識(shí)。
3、 如權(quán)利要求2所述的方法,其特征在于,所述將所述反向引用的引用值 作為發(fā)生反向引用的確定性有限狀態(tài)機(jī)DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí),具體包 括根據(jù)所述反向引用的引用值大小對(duì)其順序編號(hào),將所述編號(hào)作為發(fā)生反向 引用的確定性有限狀態(tài)機(jī)DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)。
4、 如權(quán)利要求1或2所述的方法,其特征在于,所述在所述DFA的狀態(tài)節(jié) 點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè)置引用標(biāo)識(shí),具體 包括對(duì)正則表達(dá)式進(jìn)行掃描,找出所述正則表達(dá)式中的每個(gè)反向引用;設(shè)置第一指定值和第二指定值;其中,所述第一指定值小于所述第二指定值;將所找出的每個(gè)反向引用的引用值組成一個(gè)集合,為所述集合中的每個(gè)元素按順序分配一個(gè)從第三指定值開(kāi)始的連續(xù)引用編號(hào);遍歷所述集合,用所述引用編號(hào)加上所述第一指定值來(lái)替換每個(gè)反向引用 所參考的內(nèi)容前的括號(hào),并作為非確定性有限狀態(tài)機(jī)NFA轉(zhuǎn)移邊上的字符;將所述引用編號(hào)加上所述第二指定值來(lái)替換所述正則表達(dá)式中的每個(gè)反 向引用,并作為NFA轉(zhuǎn)移邊上的字符;在NFA向DFA進(jìn)行轉(zhuǎn)換時(shí),如果所述轉(zhuǎn)移邊上的字符大于所述第一指定值 且小于所述第二指定值,則將所述轉(zhuǎn)移邊上的字符減去所述第一指定值所得到 的值作為位置標(biāo)識(shí)增加到DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上;如果所述轉(zhuǎn) 移邊上的字符大于所述第二指定值,則將所述轉(zhuǎn)移邊上的字符減去所述第二指 定值所得到的值作為引用標(biāo)識(shí)增加到DFA的狀態(tài)節(jié)點(diǎn)上。
5、 如權(quán)利要求1所述的方法,其特征在于,當(dāng)同一狀態(tài)上存在多個(gè)反向引 用時(shí),所述方法還包括在所述狀態(tài)節(jié)點(diǎn)上設(shè)置多個(gè)引用標(biāo)識(shí)所發(fā)生的順序。
6、 如權(quán)利要求5所述的方法,其特征在于,所述在所述狀態(tài)節(jié)點(diǎn)上設(shè)置多 個(gè)引用標(biāo)識(shí)所發(fā)生的順序,具體包括在所述狀態(tài)節(jié)點(diǎn)上按照反向引用出現(xiàn)的先后順序,依次為所述反向引用分 配由小到大的引用標(biāo)識(shí),并設(shè)定數(shù)值小的引用標(biāo)識(shí)優(yōu)先進(jìn)行處理。
7、 如權(quán)利要求5所述的方法,其特征在于,所述在所述狀態(tài)節(jié)點(diǎn)上設(shè)置多 個(gè)引用標(biāo)識(shí)所發(fā)生的順序,具體包括在所述狀態(tài)節(jié)點(diǎn)上按照反向引用的引用值大小,依次為所述反向引用分配 由小到大的引用標(biāo)識(shí),并在所分配的引用標(biāo)識(shí)上記錄各反向引用發(fā)生的先后順 序。
8、 如權(quán)利要求1所述的方法,其特征在于,在所述判斷該當(dāng)前輸入的字符是否匹配的過(guò)程中,所述方法還包括在判斷該當(dāng)前輸入的字符匹配成功后,再對(duì)所輸入的下一個(gè)字符進(jìn)行操 作;或,跳過(guò)進(jìn)行匹配判斷的該當(dāng)前輸入的字符,對(duì)所輸入的下一個(gè)字符進(jìn)行操 作,再根據(jù)該當(dāng)前輸入的字符的匹配結(jié)果來(lái)決定是否繼續(xù)進(jìn)行后繼的匹配操 作。
9、 一種正則表達(dá)式匹配的裝置,其特征在于,包括 DFA狀態(tài)信息設(shè)置單元,用于在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí), 并在狀態(tài)節(jié)點(diǎn)上設(shè)置? l用標(biāo)識(shí);引用緩存單元,用于在當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效 時(shí),將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;反向引用匹配單元,用于在當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效時(shí),將當(dāng)前輸 入的字符和所述引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存單元中所保存的字符進(jìn)行比較,判斷 該當(dāng)前輸入的字符是否匹配。
10、 如權(quán)利要求9所述的裝置,其特征在于,所述DFA狀態(tài)信息設(shè)置單元 包括引用標(biāo)識(shí)設(shè)置模塊,用于找出正則表達(dá)式中的每個(gè)反向引用,并將所述反 向引用的引用值作為發(fā)生反向引用的DFA狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí);位置標(biāo)識(shí)設(shè)置模塊,用于找出所述每個(gè)反向引用所包括的內(nèi)容,將所述引 用標(biāo)識(shí)作為所包括內(nèi)容在DFA中的前一個(gè)狀態(tài)節(jié)點(diǎn)或前一個(gè)狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移 邊上的位置標(biāo)識(shí)。
11、 如權(quán)利要求9所述的裝置,其特征在于,所述DFA狀態(tài)信息設(shè)置單元 中還包括順序設(shè)置模塊,用于當(dāng)同一狀態(tài)上存在多個(gè)反向引用時(shí),在所述狀態(tài)節(jié)點(diǎn) 上設(shè)置多個(gè)引用標(biāo)識(shí)所發(fā)生的順序。
12、如權(quán)利要求9-11其中之一所述的裝置,其特征在于,所述裝置還包括 輸入字符串緩存單元,用于保存需要進(jìn)行匹配的輸入字符串,并將其傳送 給所述反向引用匹配單元和所述引用緩存單元。
全文摘要
本發(fā)明實(shí)施例提供了一種正則表達(dá)式匹配的方法及裝置。所述方法具體包括在將正則表達(dá)式編譯為確定性有限狀態(tài)機(jī)DFA的過(guò)程中,在所述DFA的狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)的轉(zhuǎn)移邊上設(shè)置位置標(biāo)識(shí),并在狀態(tài)節(jié)點(diǎn)上設(shè)置引用標(biāo)識(shí);如果當(dāng)前狀態(tài)節(jié)點(diǎn)或狀態(tài)節(jié)點(diǎn)轉(zhuǎn)移邊上的位置標(biāo)識(shí)有效,則將當(dāng)前輸入的字符存儲(chǔ)到所述位置標(biāo)識(shí)對(duì)應(yīng)的引用緩存中;如果當(dāng)前狀態(tài)節(jié)點(diǎn)上的引用標(biāo)識(shí)有效,則將當(dāng)前輸入的字符和所述引用標(biāo)識(shí)對(duì)應(yīng)的引用緩存中保存的字符進(jìn)行比較,判斷該當(dāng)前輸入的字符是否匹配。通過(guò)上述技術(shù)方案的實(shí)施,就可以使DFA匹配系統(tǒng)支持反向引用,同時(shí)對(duì)現(xiàn)有的存儲(chǔ)結(jié)構(gòu)和引擎架構(gòu)的改動(dòng)都較小,從而提高了DFA匹配系統(tǒng)的規(guī)則處理能力,具有很高的實(shí)用價(jià)值。
文檔編號(hào)G06F17/30GK101599074SQ20091008832
公開(kāi)日2009年12月9日 申請(qǐng)日期2009年6月26日 優(yōu)先權(quán)日2009年6月26日
發(fā)明者浩 王, 胡新宇, 建 陳 申請(qǐng)人:華為技術(shù)有限公司