壓縮正則表達(dá)式的方法、匹配字符串的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種壓縮正則表達(dá)式的方法、匹配字符串的方法及裝置,該壓縮正則表達(dá)式的方法包括:確定正則表達(dá)式的有限自動機(jī)FA包括的所有基本狀態(tài)以及該所有基本狀態(tài)之間的遷移關(guān)系;確定該所有基本狀態(tài)中能夠合并為復(fù)合狀態(tài)的至少兩個(gè)基本狀態(tài),該至少兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),該至少兩個(gè)基本狀態(tài)以該入態(tài)為起點(diǎn)并以該出態(tài)為終點(diǎn)依次遷移;根據(jù)該復(fù)合狀態(tài),生成該正則表達(dá)式的FA狀態(tài)遷移表。因此,根據(jù)本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法、匹配字符串的方法及裝置,通過將連續(xù)的至少兩個(gè)基本狀態(tài)合并為復(fù)合狀態(tài),能夠減少FA的狀態(tài)數(shù)目和遷移邊數(shù),從而降低FA占用的內(nèi)存空間,提高系統(tǒng)的性能。
【專利說明】壓縮正則表達(dá)式的方法、匹配字符串的方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)領(lǐng)域,并且更具體地,涉及壓縮正則表達(dá)式的方法、匹配 字符串的方法及裝置。
【背景技術(shù)】
[0002] 隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展及網(wǎng)絡(luò)安全的需要,常常要對數(shù)據(jù)包的內(nèi)容識別和 分析,而隨著被測內(nèi)容的日漸復(fù)雜,采用基于字符串的多模式匹配算法逐漸被基于正則 表達(dá)式的多模式匹配算法所取代。與字符串相比,正則表達(dá)式能夠非常靈活、簡單、有 效地描述各種特征,使得特征串具有動態(tài)特性,因而能夠被用于各種動態(tài)搜索。例如, " b "、" ab "、" aab "、" aaab "和" aaaab "等字符串可以簡單地用一個(gè)正則表達(dá)式" a*b "來 表示。正則表達(dá)式有兩種實(shí)現(xiàn)方式,一種為非確定性有限狀態(tài)機(jī)(Non-deterministic Finite Automation,簡稱為 "NFA"),另一種為確定性有限狀態(tài)機(jī)(Deterministic Finite Automation,簡稱為"DFA")。與NFA相比,DFA因具有較快的匹配速度而常成為首選的自動 機(jī)形式,但DFA需要很大的存儲空間,成為當(dāng)前DFA最嚴(yán)重的限制因素。
[0003] DFA的存儲空間由狀態(tài)數(shù)目和每個(gè)狀態(tài)的遷移邊條數(shù)共同決定,因此,可以針對這 兩個(gè)因素對DFA進(jìn)行壓縮處理。本發(fā)明將有限狀態(tài)機(jī)中包括的滿足一定條件的至少兩個(gè)連 續(xù)狀態(tài)合并為復(fù)合狀態(tài),能夠減少有限狀態(tài)機(jī)的狀態(tài)數(shù)目和遷移邊總數(shù),從而降低有限狀 態(tài)機(jī)的存儲空間。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明實(shí)施例提供了一種壓縮正則表達(dá)式的方法、匹配字符串的方法及裝置,能 夠降低正則表達(dá)式的FA占用的內(nèi)存空間。
[0005] 第一方面,提供了一種壓縮正則表達(dá)式的方法,包括:確定正則表達(dá)式的有限自動 機(jī)FA包括的所有基本狀態(tài)以及該所有基本狀態(tài)之間的遷移關(guān)系;確定該所有基本狀態(tài)中 能夠合并為復(fù)合狀態(tài)的至少兩個(gè)基本狀態(tài),其中,該至少兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),該 至少兩個(gè)基本狀態(tài)以該入態(tài)為起點(diǎn)并以該出態(tài)為終點(diǎn)依次遷移,第一基本狀態(tài)的下一狀態(tài) 不包括第二基本狀態(tài),且當(dāng)?shù)谌緺顟B(tài)具有除該依次遷移所對應(yīng)的第一下一狀態(tài)之外的 第二下一狀態(tài)時(shí),該第三基本狀態(tài)的第二下一狀態(tài)分別相同且分別在相同的標(biāo)簽下遷移至 該第二下一狀態(tài),該出態(tài)也在該相同的標(biāo)簽下遷移至該第二下一狀態(tài),其中,該第一基本狀 態(tài)為該所有基本狀態(tài)中除該至少兩個(gè)基本狀態(tài)之外的基本狀態(tài),該第二基本狀態(tài)為該至少 兩個(gè)基本狀態(tài)中除該入態(tài)之外的基本狀態(tài),該第三基本狀態(tài)為該至少兩個(gè)基本狀態(tài)中除該 出態(tài)之外的基本狀態(tài);根據(jù)該復(fù)合狀態(tài),生成該正則表達(dá)式的FA狀態(tài)遷移表。
[0006] 結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,該FA狀態(tài)遷移表包括該第一其它狀 態(tài)的基本遷移表項(xiàng)和該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),其中,該FA狀態(tài)遷移表的每個(gè)遷移表項(xiàng) 均包括匹配條件和該匹配條件對應(yīng)的下一狀態(tài)。
[0007] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,該復(fù)合狀 態(tài)的復(fù)合遷移表項(xiàng)中的匹配條件為由該至少兩個(gè)基本狀態(tài)中的每個(gè)基本狀態(tài)遷移到該第 一下一狀態(tài)時(shí)的標(biāo)簽依次合并而成的復(fù)合標(biāo)簽,該匹配條件對應(yīng)的下一狀態(tài)為該出態(tài)的第 一下一狀態(tài),其中,該出態(tài)的第一下一狀態(tài)為該出態(tài)具有的所有下一狀態(tài)中除該第二下一 狀態(tài)之外的下一狀態(tài)。
[0008] 結(jié)合第一方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中, 當(dāng)該第二基本狀態(tài)具有該第二下一狀態(tài)時(shí),該FA狀態(tài)遷移表還包括該復(fù)合狀態(tài)的基本遷 移表項(xiàng),該基本遷移表項(xiàng)中的匹配條件為該相同的標(biāo)簽,該匹配條件對應(yīng)的下一狀態(tài)為該 第二下一狀態(tài)。
[0009] 第二方面,提供了一種匹配字符串的方法,包括:獲取待匹配字符串和有限狀態(tài)機(jī) FA狀態(tài)遷移表,該FA狀態(tài)遷移表的遷移表項(xiàng)包括匹配條件和該匹配條件對應(yīng)的下一狀態(tài), 且該FA狀態(tài)遷移表包括基本狀態(tài)的基本遷移表項(xiàng)和復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),該復(fù)合遷 移表項(xiàng)中的匹配條件能夠與單個(gè)字符完全匹配,該基本遷移表項(xiàng)中的匹配條件能夠與由至 少兩個(gè)字符構(gòu)成的字符串完全匹配;當(dāng)當(dāng)前狀態(tài)為非接受狀態(tài)時(shí),確定該當(dāng)前狀態(tài)為基本 狀態(tài)或復(fù)合狀態(tài),其中,該當(dāng)前狀態(tài)以FA的初始狀態(tài)為起點(diǎn);當(dāng)該當(dāng)前狀態(tài)為復(fù)合狀態(tài)時(shí), 讀取該待匹配字符串的未匹配部分的首字符;確定該FA狀態(tài)遷移表中是否存在與該首字 符匹配的該復(fù)合狀態(tài)的基本遷移表項(xiàng);當(dāng)該FA狀態(tài)遷移表中存在與該首字符匹配的該復(fù) 合狀態(tài)的基本遷移表項(xiàng)時(shí),遷移至該匹配的基本遷移表項(xiàng)中的下一狀態(tài)。
[0010] 結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,該方法還包括:當(dāng)該FA狀態(tài)遷移表 中不存在與該首字符匹配的該復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),確定該FA狀態(tài)遷移表中是否 存在與該首字符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng);當(dāng)該FA狀態(tài)遷移表中存在與該 首字符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)時(shí),依次讀取該未匹配部分中的字符以獲得 第一字符串,其中,該第一字符串以該首字符為起點(diǎn)且長度與該部分匹配的復(fù)合遷移表項(xiàng) 中的匹配條件相對應(yīng);確定該第一字符串是否與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件 完全匹配;當(dāng)該第一字符串與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配時(shí),遷移 至該部分匹配的復(fù)合遷移表項(xiàng)中的下一狀態(tài)。
[0011] 結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,該確定該 FA狀態(tài)遷移表中是否存在與該首字符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),包括:分別 將該首字符與該FA狀態(tài)遷移表中包括的該復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表項(xiàng)中的每個(gè)復(fù) 合遷移表項(xiàng)的匹配條件的起始部分進(jìn)行匹配,以分別確定該首字符是否與該每個(gè)復(fù)合遷移 表項(xiàng)部分匹配;當(dāng)該復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表項(xiàng)中存在與該首字符部分匹配的復(fù)合 遷移表項(xiàng)時(shí),確定該FA狀態(tài)遷移表中存在與該首字符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷移 表項(xiàng)。
[0012] 結(jié)合第二方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中, 該方法還包括:當(dāng)該第一字符串不能夠與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹 配時(shí),獲取該第一字符串中與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件不匹配的第一個(gè)字 符;確定該FA狀態(tài)遷移表中是否存在與該不匹配的第一個(gè)字符匹配的該復(fù)合狀態(tài)的基本 遷移表項(xiàng);當(dāng)該FA狀態(tài)遷移表中存在與該不匹配的第一個(gè)字符匹配的該復(fù)合狀態(tài)的基本 遷移表項(xiàng)時(shí),遷移至該匹配的基本遷移表項(xiàng)中的下一狀態(tài);當(dāng)FA狀態(tài)遷移表中不存在與該 不匹配的第一個(gè)字符匹配的該復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),確定該待匹配字符串的匹配結(jié) 果為失敗。
[0013] 結(jié)合第二方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式,在 第四種可能的實(shí)現(xiàn)方式中,該方法還包括:當(dāng)該未匹配部分中不存在長度與該部分匹配的 復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹配條件相對應(yīng)的該第一字符串時(shí),確定該待匹配字符串的 匹配結(jié)果為失敗。
[0014] 結(jié)合第二方面或結(jié)合第二方面的第一種至第四種可能的實(shí)現(xiàn)方式中的任一種可 能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,該方法還包括:當(dāng)該當(dāng)前狀態(tài)為基本狀態(tài)時(shí), 讀取該待匹配字符串的未匹配部分的首字符;確定該FA狀態(tài)遷移表中是否存在與該首字 符匹配的該基本狀態(tài)的基本遷移表項(xiàng);當(dāng)該FA狀態(tài)遷移表中不存在與該首字符匹配的該 基本狀態(tài)的基本遷移表項(xiàng)時(shí),確定該待匹配字符串的匹配結(jié)果為失敗。
[0015] 第三方面,提供了一種壓縮正則表達(dá)式的裝置,包括:第一確定模塊,用于確定正 則表達(dá)式的有限自動機(jī)FA包括的所有基本狀態(tài)以及該所有基本狀態(tài)之間的遷移關(guān)系;第 二確定模塊,用于確定該第一確定模塊確定的所有基本狀態(tài)中能夠合并為復(fù)合狀態(tài)的至少 兩個(gè)基本狀態(tài),其中,該至少兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),該至少兩個(gè)基本狀態(tài)以該入態(tài) 為起點(diǎn)并以該出態(tài)為終點(diǎn)依次遷移,第一基本狀態(tài)的下一狀態(tài)不包括第二基本狀態(tài),且當(dāng) 第三基本狀態(tài)具有除該依次遷移所對應(yīng)的第一下一狀態(tài)之外的第二下一狀態(tài)時(shí),該第三基 本狀態(tài)的第二下一狀態(tài)分別相同且分別在相同的標(biāo)簽下遷移至該第二下一狀態(tài),該出態(tài)也 在該相同的標(biāo)簽下遷移至該第二下一狀態(tài),其中,該第一基本狀態(tài)為該所有基本狀態(tài)中除 該至少兩個(gè)基本狀態(tài)之外的基本狀態(tài),該第二基本狀態(tài)為該至少兩個(gè)基本狀態(tài)中除該入態(tài) 之外的基本狀態(tài),該第三基本狀態(tài)為該至少兩個(gè)基本狀態(tài)中除該出態(tài)之外的基本狀態(tài);生 成模塊,用于根據(jù)該確定模塊確定的該復(fù)合狀態(tài),生成該正則表達(dá)式的FA狀態(tài)遷移表。
[0016] 結(jié)合第三方面,在第一種可能的實(shí)現(xiàn)方式中,該FA狀態(tài)遷移表包括該第一基本狀 態(tài)的基本遷移表項(xiàng)和該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),其中,該FA狀態(tài)遷移表的每個(gè)遷移表項(xiàng) 均包括匹配條件和該匹配條件對應(yīng)的下一狀態(tài)。
[0017] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,該復(fù)合狀 態(tài)的復(fù)合遷移表項(xiàng)中的匹配條件為由該至少兩個(gè)基本狀態(tài)中的每個(gè)基本狀態(tài)遷移到該第 一下一狀態(tài)時(shí)的標(biāo)簽依次合并而成的復(fù)合標(biāo)簽,該匹配條件對應(yīng)的下一狀態(tài)為該出態(tài)的第 一下一狀態(tài),其中,該出態(tài)的第一下一狀態(tài)為該出態(tài)具有的所有下一狀態(tài)中除該第二下一 狀態(tài)之外的下一狀態(tài)。
[0018] 結(jié)合第三方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中, 當(dāng)該第二基本狀態(tài)具有該第二下一狀態(tài)時(shí),該FA狀態(tài)遷移表還包括該復(fù)合狀態(tài)的基本遷 移表項(xiàng),該基本遷移表項(xiàng)中的匹配條件為該相同的標(biāo)簽,該匹配條件對應(yīng)的下一狀態(tài)為該 第二下一狀態(tài)。
[0019] 第四方面,提供了一種匹配字符串的裝置,包括:獲取模塊,用于獲取待匹配字符 串和有限狀態(tài)機(jī)FA狀態(tài)遷移表,該FA狀態(tài)遷移表的遷移表項(xiàng)包括匹配條件和該匹配條件 對應(yīng)的下一狀態(tài),且該FA狀態(tài)遷移表包括基本狀態(tài)的基本遷移表項(xiàng)和復(fù)合狀態(tài)的復(fù)合遷 移表項(xiàng),該復(fù)合遷移表項(xiàng)中的匹配條件能夠與單個(gè)字符完全匹配,該基本遷移表項(xiàng)中的匹 配條件能夠與由至少兩個(gè)字符構(gòu)成的字符串完全匹配;第一確定模塊,用于當(dāng)該獲取模塊 獲取的當(dāng)前狀態(tài)為非接受狀態(tài)時(shí),確定該當(dāng)前狀態(tài)為基本狀態(tài)或復(fù)合狀態(tài),其中,該當(dāng)前狀 態(tài)以FA的初始狀態(tài)為起點(diǎn);讀取模塊,用于當(dāng)該第一確定模塊確定該當(dāng)前狀態(tài)為復(fù)合狀態(tài) 時(shí),讀取該待匹配字符串的未匹配部分的首字符;第二確定模塊,用于確定該FA狀態(tài)遷移 表中是否存在與該讀取模塊讀取的該首字符匹配的該復(fù)合狀態(tài)的基本遷移表項(xiàng);遷移模 塊,用于當(dāng)該第二確定模塊確定該FA狀態(tài)遷移表中存在與該首字符匹配的該復(fù)合狀態(tài)的 基本遷移表項(xiàng)時(shí),遷移至該匹配的基本遷移表項(xiàng)中的下一狀態(tài)。
[0020] 結(jié)合第四方面,在第一種可能的實(shí)現(xiàn)方式中,該裝置還包括:第三確定模塊,用于 當(dāng)該第二確定模塊確定該FA狀態(tài)遷移表中不存在與該首字符匹配的該復(fù)合狀態(tài)的基本遷 移表項(xiàng)時(shí),確定該FA狀態(tài)遷移表中是否存在與該首字符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷 移表項(xiàng);該讀取模塊還用于當(dāng)該第三確定模塊確定該FA狀態(tài)遷移表中存在與該首字符部 分匹配的該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)時(shí),依次讀取該未匹配部分中的字符以獲得第一字符 串,其中,該第一字符串以該首字符為起點(diǎn)且長度與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配 條件相對應(yīng);該第三確定模塊還用于確定該讀取模塊讀取的該第一字符串是否與該部分匹 配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配;該遷移模塊還用于當(dāng)該第三確定模塊確定該第 一字符串與該部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配時(shí),遷移至該部分匹配的復(fù) 合遷移表項(xiàng)中的下一狀態(tài)。
[0021] 結(jié)合第四方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,該第三確 定模塊具體用于分別將該首字符與該FA狀態(tài)遷移表中包括的該復(fù)合狀態(tài)的至少一個(gè)復(fù)合 遷移表項(xiàng)中的每個(gè)復(fù)合遷移表項(xiàng)的匹配條件的起始部分進(jìn)行匹配,以分別確定該首字符是 否與該每個(gè)復(fù)合遷移表項(xiàng)部分匹配;以及當(dāng)該匹配單元該復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表 項(xiàng)中存在與該首字符部分匹配的復(fù)合遷移表項(xiàng)時(shí),確定該FA狀態(tài)遷移表中存在與該首字 符部分匹配的該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)。
[0022] 結(jié)合第四方面的第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中, 該獲取模塊還用于當(dāng)該第三確定模塊確定該第一字符串不能夠與該部分匹配的復(fù)合遷移 表項(xiàng)中的匹配條件完全匹配時(shí),獲取該第一字符串中與該部分匹配的復(fù)合遷移表項(xiàng)中的匹 配條件不匹配的第一個(gè)字符;該第三確定模塊還用于確定該FA狀態(tài)遷移表中是否存在與 該獲取模塊獲取的該不匹配的第一個(gè)字符匹配的該復(fù)合狀態(tài)的基本遷移表項(xiàng);該遷移模塊 還用于當(dāng)該第三確定模塊確定該FA狀態(tài)遷移表中存在與該不匹配的第一個(gè)字符匹配的該 復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),遷移至該匹配的基本遷移表項(xiàng)中的下一狀態(tài);該第一確定模 塊還用于當(dāng)該第三確定模塊確定該FA狀態(tài)遷移表中不存在與該不匹配的第一個(gè)字符匹配 的該復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),確定該待匹配字符串的匹配結(jié)果為失敗。
[0023] 結(jié)合第四方面的第一種至第三種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式,在 第四種可能的實(shí)現(xiàn)方式中,該第一確定模塊還用于當(dāng)該未匹配部分中不存在長度與該部分 匹配的復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹配條件相對應(yīng)的該第一字符串時(shí),確定該待匹配字 符串的匹配結(jié)果為失敗。
[0024] 結(jié)合第四方面或結(jié)合第四方面的第一種至第四種可能的實(shí)現(xiàn)方式中的任一種可 能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,該讀取模塊還用于當(dāng)該第一確定模塊確定該 當(dāng)前狀態(tài)為基本狀態(tài)時(shí),讀取該待匹配字符串的未匹配部分的首字符;該第二確定模塊還 用于確定該FA狀態(tài)遷移表中是否存在與該讀取模塊讀取的該首字符匹配的該基本狀態(tài)的 基本遷移表項(xiàng);該第一確定模塊還用于當(dāng)該第二確定模塊確定該FA狀態(tài)遷移表中不存在 與該首字符匹配的該基本狀態(tài)的基本遷移表項(xiàng)時(shí),確定該待匹配字符串的匹配結(jié)果為失 敗。
[0025] 基于上述技術(shù)方案,本發(fā)明實(shí)施例提供的壓縮正則表達(dá)式的方法、匹配字符串的 方法及裝置,通過將連續(xù)的至少兩個(gè)基本狀態(tài)合并為復(fù)合狀態(tài),能夠減少FA的狀態(tài)數(shù)目和 遷移邊數(shù),從而降低FA占用的內(nèi)存空間,提高系統(tǒng)的性能。
【專利附圖】
【附圖說明】
[0026] 為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對本發(fā)明實(shí)施例或現(xiàn)有技術(shù) 描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面所描述的附圖僅僅是本發(fā)明的 一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這 些附圖獲得其他的附圖。
[0027] 圖1是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法的示意性流程圖。
[0028] 圖2是本發(fā)明實(shí)施例的一個(gè)正則表達(dá)式的未經(jīng)壓縮的DFA狀態(tài)圖。
[0029] 圖3是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法對圖2所示的DFA狀態(tài)圖進(jìn)行壓縮 后獲得的DFA狀態(tài)圖。
[0030] 圖4是本發(fā)明實(shí)施例的另一個(gè)正則表達(dá)式的未經(jīng)壓縮的DFA狀態(tài)圖。
[0031] 圖5是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法對圖4所示的DFA狀態(tài)圖進(jìn)行壓縮 后獲得的DFA狀態(tài)圖。
[0032] 圖6是本發(fā)明實(shí)施例的再一個(gè)正則表達(dá)式的未經(jīng)壓縮的DFA狀態(tài)圖。
[0033] 圖7是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法對圖6所示的DFA狀態(tài)圖進(jìn)行壓縮 后獲得的DFA狀態(tài)圖。
[0034] 圖8是本發(fā)明實(shí)施例的匹配字符串的方法的示意性流程圖。
[0035] 圖9是本發(fā)明實(shí)施例的匹配字符串的方法的另一示意性流程圖。
[0036] 圖10是本發(fā)明實(shí)施例的匹配字符串的方法的再一示意性流程圖。
[0037] 圖11是本發(fā)明另一實(shí)施例的匹配字符串的方法的示意性流程圖。
[0038] 圖12是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的裝置的示意性框圖。
[0039] 圖13是本發(fā)明實(shí)施例的匹配字符串的裝置的示意性框圖。
[0040] 圖14是本發(fā)明實(shí)施例的匹配字符串的裝置的另一示意性框圖。
[0041] 圖15是本發(fā)明另一實(shí)施例的壓縮正則表達(dá)式的裝置的示意性框圖。
[0042] 圖16是本發(fā)明另一實(shí)施例的匹配字符串的裝置的示意性框圖。
【具體實(shí)施方式】
[0043] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā) 明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí) 施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。
[0044] 圖1是本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法100的示意性流程圖,該方法100 可以由獨(dú)立裝置執(zhí)行,也可以由獨(dú)立裝置中的模塊執(zhí)行,為了便于描述,下面將該方法的執(zhí) 行主體稱為壓縮正則表達(dá)式的裝置,如圖1所示,該方法100包括:
[0045] S110,確定正則表達(dá)式的有限自動機(jī)FA包括的所有基本狀態(tài)以及該所有基本狀 態(tài)之間的遷移關(guān)系;
[0046] S120,確定該所有基本狀態(tài)中能夠合并為復(fù)合狀態(tài)的至少兩個(gè)基本狀態(tài),其中,該 至少兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),該至少兩個(gè)基本狀態(tài)以該入態(tài)為起點(diǎn)并以該出態(tài)為終 點(diǎn)依次遷移,第一基本狀態(tài)的下一狀態(tài)不包括第二基本狀態(tài),且當(dāng)?shù)谌緺顟B(tài)具有除該 依次遷移所對應(yīng)的第一下一狀態(tài)之外的第二下一狀態(tài)時(shí),該第三基本狀態(tài)的第二下一狀態(tài) 分別相同且分別在相同的標(biāo)簽下遷移至該第二下一狀態(tài),該出態(tài)也在該相同的標(biāo)簽下遷移 至該第二下一狀態(tài),其中,該第一基本狀態(tài)為該所有基本狀態(tài)中除該至少兩個(gè)基本狀態(tài)之 外的基本狀態(tài),該第二基本狀態(tài)為該至少兩個(gè)基本狀態(tài)中除該入態(tài)之外的基本狀態(tài),該第 三基本狀態(tài)為該至少兩個(gè)基本狀態(tài)中除該出態(tài)之外的基本狀態(tài);
[0047] S130,根據(jù)該復(fù)合狀態(tài),生成該正則表達(dá)式的FA狀態(tài)遷移表。
[0048] 為了便于描述,可以將上述能夠合并為復(fù)合狀態(tài)的至少兩個(gè)基本狀態(tài)稱為連續(xù)的 至少兩個(gè)基本狀態(tài),該壓縮正則表達(dá)式的裝置將該連續(xù)的至少兩個(gè)狀態(tài)合并為一個(gè)復(fù)合狀 態(tài)。
[0049] 因此,根據(jù)本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法,通過將連續(xù)的至少兩個(gè)基本 狀態(tài)合并為復(fù)合狀態(tài),能夠減少FA的狀態(tài)數(shù)目和遷移邊數(shù),從而降低FA占用的內(nèi)存空間, 提1?系統(tǒng)的性能。
[0050] 在本發(fā)明實(shí)施例中,將正則表達(dá)式的未經(jīng)過任何壓縮的FA所包括的狀態(tài)稱為基 本狀態(tài),F(xiàn)A包括的除該至少兩個(gè)基本狀態(tài)之外的其它狀態(tài)稱為第一基本狀態(tài),該至少兩個(gè) 基本狀態(tài)包括的除入態(tài)之外的其它狀態(tài)稱為第二基本狀態(tài),而將該至少兩個(gè)基本狀態(tài)包括 的除出態(tài)之外的其它狀態(tài)稱為第三基本狀態(tài),其中,該FA可以為DFA或NFA,本發(fā)明實(shí)施例 對此不作限定。
[0051] 在SllO中,可以具體通過確定該正則表達(dá)式的未經(jīng)任何壓縮的FA狀態(tài)圖來確定 FA的所有基本狀態(tài)和該所有基本狀態(tài)之間的遷移關(guān)系,F(xiàn)A可以由該所有基本狀態(tài)中的某 一基本狀態(tài)遷移到另一基本狀態(tài),其中,當(dāng)FA處于某個(gè)基本狀態(tài)時(shí),F(xiàn)A在某個(gè)標(biāo)簽下遷移 至的狀態(tài)稱為該基本狀態(tài)的下一狀態(tài),但本發(fā)明實(shí)施例不限于此。
[0052] 在S120中,該至少兩個(gè)基本狀態(tài)可以不包括該FA的接受狀態(tài),且該至少兩個(gè)基本 狀態(tài)包括的入態(tài)為遷移到該至少兩個(gè)基本狀態(tài)的入口,即FA可以由除該至少兩個(gè)基本狀 態(tài)之外的第一狀態(tài)遷移到該至少兩個(gè)基本狀態(tài)中的入態(tài),然后由該入態(tài)依次遷移到第二基 本狀態(tài),而無法由該第一基本狀態(tài)直接遷移到該第二基本狀態(tài),相應(yīng)地,該第一基本狀態(tài)的 下一狀態(tài)可以包括該入態(tài),但不包括該第二基本狀態(tài);此外,該FA可以由該至少兩個(gè)基本 狀態(tài)中的出態(tài)遷移到該第一基本狀態(tài),相應(yīng)地,該出態(tài)可以具有至少一個(gè)下一狀態(tài),而除該 出態(tài)之外的第二基本狀態(tài)可以只具有一個(gè)下一狀態(tài),即該至少兩個(gè)基本狀態(tài)之間依次遷移 所對應(yīng)的下一狀態(tài)。
[0053] 可選地,當(dāng)該第三基本狀態(tài)具有第二下一狀態(tài)時(shí),即除了該依次遷移所對應(yīng)的下 一狀態(tài)之外的其它下一狀態(tài),該第三基本狀態(tài)的第二下一狀態(tài)可以分別相同,且該第三基 本狀態(tài)在相同的標(biāo)簽下遷移到該相同的第二下一狀態(tài),該出態(tài)在該相同的標(biāo)簽下也遷移到 該相同的第二下一狀態(tài)。其中,該第二下一狀態(tài)可以為該至少兩個(gè)基本狀態(tài)中的某一個(gè)基 本狀態(tài),也可以為該第一基本狀態(tài)中包括的狀態(tài),本發(fā)明實(shí)施例不限于此。
[0054] 在S130中,該壓縮正則表達(dá)式的裝置將該連續(xù)的至少兩個(gè)基本狀態(tài)合并為復(fù)合 狀態(tài)后,可以獲得該正則表達(dá)式的壓縮后的FA,該壓縮后的FA包括第一基本狀態(tài)和復(fù)合狀 態(tài),相應(yīng)地,該壓縮正則表達(dá)式的裝置可以根據(jù)該第一基本狀態(tài)中包括的各個(gè)基本狀態(tài)之 間的遷移關(guān)系以及該第一基本狀態(tài)與復(fù)合狀態(tài)之間的遷移關(guān)系,生成該正則表達(dá)式的FA 狀態(tài)遷移表,但本發(fā)明實(shí)施例不限于此。
[0055] 可選地,當(dāng)該壓縮后的FA包括至少兩個(gè)復(fù)合狀態(tài)時(shí),該FA也可以在該至少兩個(gè)復(fù) 合狀態(tài)之間遷移,但本發(fā)明實(shí)施例不限于此??蛇x地,該壓縮正則表達(dá)式的裝置可以采用現(xiàn) 有的壓縮存儲方式存儲該FA狀態(tài)遷移表,也可以采用其他存儲方式存儲該FA狀態(tài)遷移表, 本發(fā)明實(shí)施例不限于此。
[0056] 可選地,該FA狀態(tài)遷移表包括除該第一基本狀態(tài)的基本遷移表項(xiàng)和該復(fù)合狀態(tài) 的復(fù)合遷移表項(xiàng),其中,該FA狀態(tài)遷移表的每個(gè)遷移表項(xiàng)均包括匹配條件和該匹配條件對 應(yīng)的下一狀態(tài)。
[0057] 具體地,該FA狀態(tài)遷移表可以只包括一個(gè)遷移表,該遷移表中包括該第一基本狀 態(tài)和該復(fù)合狀態(tài)的遷移表項(xiàng);該FA狀態(tài)遷移表也可以包括兩個(gè)遷移表,其中一個(gè)遷移表包 括該第一基本狀態(tài)的遷移表項(xiàng),另一個(gè)遷移表包括該復(fù)合狀態(tài)的遷移表項(xiàng),但本發(fā)明實(shí)施 例不限于此。
[0058] 可選地,作為另一實(shí)施例,該復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹配條件為由該至少 兩個(gè)基本狀態(tài)中的每個(gè)基本狀態(tài)遷移到該第一下一狀態(tài)時(shí)的標(biāo)簽依次合并而成的復(fù)合標(biāo) 簽,該匹配條件對應(yīng)的下一狀態(tài)為該出態(tài)的第一下一狀態(tài),其中,該出態(tài)的第一下一狀態(tài)為 該出態(tài)具有的所有下一狀態(tài)中除該第二下一狀態(tài)之外的下一狀態(tài)。
[0059] 其中,當(dāng)該FA當(dāng)前處于該復(fù)合狀態(tài)時(shí),在復(fù)合標(biāo)簽下,即該FA由該入態(tài)依次遷移 到出態(tài)并由出態(tài)遷移到第一下一狀態(tài)所依次組成的字符串,該FA遷移到該出態(tài)的該第一 下一狀態(tài)。該復(fù)合標(biāo)簽可以為由至少兩個(gè)字符組成的字符串,例如,'abc'或'234'等等, 該復(fù)合標(biāo)簽也可以由字符和表達(dá)式組成,例如,'[b_e]jk',其中,該[b-e]表示字符的范圍 位于'b'與'e'之間,但本發(fā)明實(shí)施例不限于此。
[0060] 可選地,作為另一實(shí)施例,當(dāng)該第二基本狀態(tài)具有該第二下一狀態(tài)時(shí),該FA狀態(tài) 遷移表還包括該復(fù)合狀態(tài)的基本遷移表項(xiàng),該基本遷移表項(xiàng)中的匹配條件為該相同的標(biāo) 簽,該匹配條件對應(yīng)的下一狀態(tài)為該第二下一狀態(tài)。
[0061] 其中,該至少兩個(gè)基本狀態(tài)在該相同的標(biāo)簽下分別遷移至該第二下一狀態(tài),等價(jià) 于該復(fù)合狀態(tài)在該相同的標(biāo)簽下遷移至該第二下一狀態(tài)??蛇x地,當(dāng)合并為復(fù)合狀態(tài)的至 少兩個(gè)基本狀態(tài)的第二下一狀態(tài)均為第一基本狀態(tài)時(shí),該DFA狀態(tài)遷移表中該復(fù)合狀態(tài)的 基本遷移表項(xiàng)中的下一狀態(tài)為該相同的第一基本狀態(tài);而當(dāng)合并為復(fù)合狀態(tài)的至少兩個(gè)基 本狀態(tài)的第二下一狀態(tài)為該復(fù)合狀態(tài)中的某一個(gè)基本狀態(tài)時(shí),在該DFA狀態(tài)遷移表中,該 復(fù)合狀態(tài)的基本遷移表項(xiàng)中的下一狀態(tài)為該復(fù)合狀態(tài),但本發(fā)明實(shí)施例不限于此。
[0062] 因此,根據(jù)本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法,通過將連續(xù)的至少兩個(gè)基本 狀態(tài)合并為復(fù)合狀態(tài),能夠減少FA的狀態(tài)數(shù)目和遷移邊數(shù),從而降低FA占用的內(nèi)存空間, 提1?系統(tǒng)的性能。
[0063] 下面將結(jié)合具體例子對本發(fā)明實(shí)施例提供的壓縮正則表達(dá)式的方法做更詳細(xì)的 說明。圖2是正則表達(dá)式(12110 115326 I 20237 11200)+9'的未經(jīng)壓縮的DFA狀態(tài)圖,該 DFA狀態(tài)圖中包括14個(gè)基本狀態(tài),其中,狀態(tài)1為初始狀態(tài),狀態(tài)O為接受狀態(tài),且該14個(gè) 基本狀態(tài)中的各個(gè)基本狀態(tài)之間的遷移關(guān)系由箭頭所示,以狀態(tài)1為例,當(dāng)輸入字符為圖 中箭頭所示的字符'2'時(shí),DFA由狀態(tài)1遷移到箭頭所指示的狀態(tài)2,該狀態(tài)2即為狀態(tài)1 在標(biāo)簽'2'下的下一狀態(tài)。
[0064] 如圖2所示,DFA在狀態(tài)2、9、10和13之間依次遷移,其中,狀態(tài)2為入態(tài),狀態(tài)13 為出態(tài),狀態(tài)2具有分別由狀態(tài)1和狀態(tài)5發(fā)出的兩個(gè)入邊,表明該狀態(tài)2為兩個(gè)第一基本 狀態(tài)的下一狀態(tài),而狀態(tài)9、狀態(tài)10和狀態(tài)13不具有除該依次遷移所構(gòu)成的入邊之外的其 它入邊,表明狀態(tài)9、狀態(tài)10和狀態(tài)13不是第一基本狀態(tài)的下一狀態(tài);且狀態(tài)2、狀態(tài)9和 狀態(tài)10不具有除該依次遷移所構(gòu)成的第一遷移邊之外的第二遷移邊,表示這三個(gè)第三其 它基本狀態(tài)不具有除該依次遷移所對應(yīng)的第一下一狀態(tài)之外的第二下一狀態(tài),因此,狀態(tài) 2、9、10和13符合合并為復(fù)合狀態(tài)的條件,能夠被合并為一個(gè)復(fù)合狀態(tài)。類似地,狀態(tài)8、12 和11也符合合并為復(fù)合狀態(tài)的條件。DFA在狀態(tài)6、4和7之間也依次遷移,然而,由于狀態(tài) 6具有兩個(gè)下一狀態(tài),即在依次遷移時(shí)對應(yīng)的第一下一狀態(tài)(狀態(tài)4)和第二下一狀態(tài)(狀態(tài) 7),其中,該第二下一狀態(tài)所對應(yīng)的標(biāo)簽為輸入字符'0',而狀態(tài)4和狀態(tài)7不具有在標(biāo)簽 '〇'下遷移到該第二下一狀態(tài)的遷移邊,因此,狀態(tài)6、狀態(tài)4和狀態(tài)7不符合合并為復(fù)合狀 態(tài)的條件。
[0065] 由上面的描述可知,可以將狀態(tài)2、9、10和13合并為復(fù)合狀態(tài)s0,且將狀態(tài)8、12 和11合并為復(fù)合狀態(tài)sl,以生成如圖3所示的壓縮后的DFA狀態(tài)圖。其中,該復(fù)合狀態(tài)SO 和si分別在復(fù)合標(biāo)簽'0237'和'326'下遷移到狀態(tài)5,該復(fù)合標(biāo)簽'0237'由狀態(tài)2、狀態(tài) 9以及狀態(tài)10依次遷移時(shí)的標(biāo)簽以及狀態(tài)13遷移到下一狀態(tài)時(shí)的標(biāo)簽依次合并而成,而復(fù) 合標(biāo)簽'326'由狀態(tài)8、狀態(tài)12和狀態(tài)11的標(biāo)簽依次合并而成。相對應(yīng)地,該壓縮前和壓 縮后的正則表達(dá)式的DFA狀態(tài)遷移表分別如表1和表2所不,分別對應(yīng)于圖2和圖3所不 的DFA狀態(tài)圖。
[0066] 如表1所示,該未經(jīng)壓縮的正則表達(dá)式的DFA狀態(tài)遷移表記錄了圖2所示的各個(gè) 基本狀態(tài)以及各基本狀態(tài)分別在不同標(biāo)簽下遷移到的下一狀態(tài),如表2所示,該壓縮后的 DFA遷移表包括兩個(gè)遷移表,其中,遷移表(a)記錄第一其它基本狀態(tài)和該復(fù)合狀態(tài)在由單 個(gè)字符組成的簡單標(biāo)簽下遷移到的下一狀態(tài),而遷移表(b)記錄該復(fù)合狀態(tài)在由至少兩個(gè) 字符串組成的復(fù)合標(biāo)簽下遷移到的下一狀態(tài);可選地,也可以將該遷移表(a)和遷移表(b) 合并為一個(gè)遷移表,但本發(fā)明實(shí)施例不限于此。
[0067] 因此,根據(jù)本發(fā)明實(shí)施例的壓縮正則表達(dá)式的方法,通過將連續(xù)的至少兩個(gè)基本 狀態(tài)合并為復(fù)合狀態(tài),能夠減少FA的狀態(tài)數(shù)目和遷移邊數(shù),從而降低FA占用的內(nèi)存空間, 提1?系統(tǒng)的性能。
[0068] 表1正則表達(dá)式(12110 115326 I 20237 11200)+9'未經(jīng)壓縮的DFA遷移表
【權(quán)利要求】
1. 一種壓縮正則表達(dá)式的方法,其特征在于,包括: 確定正則表達(dá)式的有限自動機(jī)FA包括的所有基本狀態(tài)以及所述所有基本狀態(tài)之間的 遷移關(guān)系; 確定所述所有基本狀態(tài)中能夠合并為復(fù)合狀態(tài)的至少兩個(gè)基本狀態(tài),其中,所述至少 兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),所述至少兩個(gè)基本狀態(tài)以所述入態(tài)為起點(diǎn)并以所述出態(tài)為 終點(diǎn)依次遷移,第一基本狀態(tài)的下一狀態(tài)不包括第二基本狀態(tài),且當(dāng)?shù)谌緺顟B(tài)具有除 所述依次遷移所對應(yīng)的第一下一狀態(tài)之外的第二下一狀態(tài)時(shí),所述第三基本狀態(tài)的第二下 一狀態(tài)分別相同且分別在相同的標(biāo)簽下遷移至所述第二下一狀態(tài),所述出態(tài)也在所述相同 的標(biāo)簽下遷移至所述第二下一狀態(tài),其中,所述第一基本狀態(tài)為所述所有基本狀態(tài)中除所 述至少兩個(gè)基本狀態(tài)之外的基本狀態(tài),所述第二基本狀態(tài)為所述至少兩個(gè)基本狀態(tài)中除所 述入態(tài)之外的基本狀態(tài),所述第三基本狀態(tài)為所述至少兩個(gè)基本狀態(tài)中除所述出態(tài)之外的 基本狀態(tài); 根據(jù)所述復(fù)合狀態(tài),生成所述正則表達(dá)式的FA狀態(tài)遷移表。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述FA狀態(tài)遷移表包括所述第一基本狀 態(tài)的基本遷移表項(xiàng)和所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),其中,所述FA狀態(tài)遷移表的每個(gè)遷移 表項(xiàng)均包括匹配條件和所述匹配條件對應(yīng)的下一狀態(tài)。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹配 條件為由所述至少兩個(gè)基本狀態(tài)中的每個(gè)基本狀態(tài)遷移到所述第一下一狀態(tài)時(shí)的標(biāo)簽依 次合并而成的復(fù)合標(biāo)簽,所述匹配條件對應(yīng)的下一狀態(tài)為所述出態(tài)的第一下一狀態(tài),其中, 所述出態(tài)的第一下一狀態(tài)為所述出態(tài)具有的所有下一狀態(tài)中除所述第二下一狀態(tài)之外的 下一狀態(tài)。
4. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,當(dāng)所述第二基本狀態(tài)具有所述第二下 一狀態(tài)時(shí),所述FA狀態(tài)遷移表還包括所述復(fù)合狀態(tài)的基本遷移表項(xiàng),所述基本遷移表項(xiàng)中 的匹配條件為所述相同的標(biāo)簽,所述匹配條件對應(yīng)的下一狀態(tài)為所述第二下一狀態(tài)。
5. -種匹配字符串的方法,其特征在于,包括: 獲取待匹配字符串和有限狀態(tài)機(jī)FA狀態(tài)遷移表,所述FA狀態(tài)遷移表的遷移表項(xiàng)包括 匹配條件和所述匹配條件對應(yīng)的下一狀態(tài),且所述FA狀態(tài)遷移表包括基本狀態(tài)的基本遷 移表項(xiàng)和復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),所述復(fù)合遷移表項(xiàng)中的匹配條件能夠與單個(gè)字符完全 匹配,所述基本遷移表項(xiàng)中的匹配條件能夠與由至少兩個(gè)字符構(gòu)成的字符串完全匹配; 當(dāng)當(dāng)前狀態(tài)為非接受狀態(tài)時(shí),確定所述當(dāng)前狀態(tài)為基本狀態(tài)或復(fù)合狀態(tài),其中,所述當(dāng) 前狀態(tài)以FA的初始狀態(tài)為起點(diǎn); 當(dāng)所述當(dāng)前狀態(tài)為復(fù)合狀態(tài)時(shí),讀取所述待匹配字符串的未匹配部分的首字符; 確定所述FA狀態(tài)遷移表中是否存在與所述首字符匹配的所述復(fù)合狀態(tài)的基本遷移表 項(xiàng); 當(dāng)所述FA狀態(tài)遷移表中存在與所述首字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí), 遷移至所述匹配的基本遷移表項(xiàng)中的下一狀態(tài)。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法還包括: 當(dāng)所述FA狀態(tài)遷移表中不存在與所述首字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng) 時(shí),確定所述FA狀態(tài)遷移表中是否存在與所述首字符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷 移表項(xiàng); 當(dāng)所述FA狀態(tài)遷移表中存在與所述首字符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng) 時(shí),依次讀取所述未匹配部分中的字符以獲得第一字符串,其中,所述第一字符串以所述首 字符為起點(diǎn)且長度與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件相對應(yīng); 確定所述第一字符串是否與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配; 當(dāng)所述第一字符串與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配時(shí),遷移至 所述部分匹配的復(fù)合遷移表項(xiàng)中的下一狀態(tài)。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述確定所述FA狀態(tài)遷移表中是否存在 與所述首字符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),包括: 分別將所述首字符與所述FA狀態(tài)遷移表中包括的所述復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移 表項(xiàng)中的每個(gè)復(fù)合遷移表項(xiàng)的匹配條件的起始部分進(jìn)行匹配,以分別確定所述首字符是否 與所述每個(gè)復(fù)合遷移表項(xiàng)部分匹配; 當(dāng)所述復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表項(xiàng)中存在與所述首字符部分匹配的復(fù)合遷移 表項(xiàng)時(shí),確定所述FA狀態(tài)遷移表中存在與所述首字符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷 移表項(xiàng)。
8. 根據(jù)權(quán)利要求6或7所述的方法,其特征在于,所述方法還包括: 當(dāng)所述第一字符串不能夠與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配時(shí), 獲取所述第一字符串中與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件不匹配的第一個(gè)字 符; 確定所述FA狀態(tài)遷移表中是否存在與所述不匹配的第一個(gè)字符匹配的所述復(fù)合狀態(tài) 的基本遷移表項(xiàng); 當(dāng)所述FA狀態(tài)遷移表中存在與所述不匹配的第一個(gè)字符匹配的所述復(fù)合狀態(tài)的基本 遷移表項(xiàng)時(shí),遷移至所述匹配的基本遷移表項(xiàng)中的下一狀態(tài); 當(dāng)FA狀態(tài)遷移表中不存在與所述不匹配的第一個(gè)字符匹配的所述復(fù)合狀態(tài)的基本遷 移表項(xiàng)時(shí),確定所述待匹配字符串的匹配結(jié)果為失敗。
9. 根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 當(dāng)所述未匹配部分中不存在長度與所述部分匹配的復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹 配條件相對應(yīng)的所述第一字符串時(shí),確定所述待匹配字符串的匹配結(jié)果為失敗。
10. 根據(jù)權(quán)利要求5至9中任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 當(dāng)所述當(dāng)前狀態(tài)為基本狀態(tài)時(shí),讀取所述待匹配字符串的未匹配部分的首字符; 確定所述FA狀態(tài)遷移表中是否存在與所述首字符匹配的所述基本狀態(tài)的基本遷移表 項(xiàng); 當(dāng)所述FA狀態(tài)遷移表中不存在與所述首字符匹配的所述基本狀態(tài)的基本遷移表項(xiàng) 時(shí),確定所述待匹配字符串的匹配結(jié)果為失敗。
11. 一種壓縮正則表達(dá)式的裝置,其特征在于,包括: 第一確定模塊,用于確定正則表達(dá)式的有限自動機(jī)FA包括的所有基本狀態(tài)以及所述 所有基本狀態(tài)之間的遷移關(guān)系; 第二確定模塊,用于確定所述第一確定模塊確定的所有基本狀態(tài)中能夠合并為復(fù)合狀 態(tài)的至少兩個(gè)基本狀態(tài),其中,所述至少兩個(gè)基本狀態(tài)包括入態(tài)和出態(tài),所述至少兩個(gè)基本 狀態(tài)以所述入態(tài)為起點(diǎn)并以所述出態(tài)為終點(diǎn)依次遷移,第一基本狀態(tài)的下一狀態(tài)不包括第 二基本狀態(tài),且當(dāng)?shù)谌緺顟B(tài)具有除所述依次遷移所對應(yīng)的第一下一狀態(tài)之外的第二下 一狀態(tài)時(shí),所述第三基本狀態(tài)的第二下一狀態(tài)分別相同且分別在相同的標(biāo)簽下遷移至所述 第二下一狀態(tài),所述出態(tài)也在所述相同的標(biāo)簽下遷移至所述第二下一狀態(tài),其中,所述第一 基本狀態(tài)為所述所有基本狀態(tài)中除所述至少兩個(gè)基本狀態(tài)之外的基本狀態(tài),所述第二基本 狀態(tài)為所述至少兩個(gè)基本狀態(tài)中除所述入態(tài)之外的基本狀態(tài),所述第三基本狀態(tài)為所述至 少兩個(gè)基本狀態(tài)中除所述出態(tài)之外的基本狀態(tài); 生成模塊,用于根據(jù)所述確定模塊確定的所述復(fù)合狀態(tài),生成所述正則表達(dá)式的FA狀 態(tài)遷移表。
12. 根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述FA狀態(tài)遷移表包括所述第一基本 狀態(tài)的基本遷移表項(xiàng)和所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),其中,所述FA狀態(tài)遷移表的每個(gè)遷 移表項(xiàng)均包括匹配條件和所述匹配條件對應(yīng)的下一狀態(tài)。
13. 根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹 配條件為由所述至少兩個(gè)基本狀態(tài)中的每個(gè)基本狀態(tài)遷移到所述第一下一狀態(tài)時(shí)的標(biāo)簽 依次合并而成的復(fù)合標(biāo)簽,所述匹配條件對應(yīng)的下一狀態(tài)為所述出態(tài)的第一下一狀態(tài),其 中,所述出態(tài)的第一下一狀態(tài)為所述出態(tài)具有的所有下一狀態(tài)中除所述第二下一狀態(tài)之外 的下一狀態(tài)。
14. 根據(jù)權(quán)利要求12或13所述的裝置,其特征在于,當(dāng)所述第二基本狀態(tài)具有所述第 二下一狀態(tài)時(shí),所述FA狀態(tài)遷移表還包括所述復(fù)合狀態(tài)的基本遷移表項(xiàng),所述基本遷移表 項(xiàng)中的匹配條件為所述相同的標(biāo)簽,所述匹配條件對應(yīng)的下一狀態(tài)為所述第二下一狀態(tài)。
15. -種匹配字符串的裝置,其特征在于,包括: 獲取模塊,用于獲取待匹配字符串和有限狀態(tài)機(jī)FA狀態(tài)遷移表,所述FA狀態(tài)遷移表的 遷移表項(xiàng)包括匹配條件和所述匹配條件對應(yīng)的下一狀態(tài),且所述FA狀態(tài)遷移表包括基本 狀態(tài)的基本遷移表項(xiàng)和復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng),所述復(fù)合遷移表項(xiàng)中的匹配條件能夠與 單個(gè)字符完全匹配,所述基本遷移表項(xiàng)中的匹配條件能夠與由至少兩個(gè)字符構(gòu)成的字符串 完全匹配; 第一確定模塊,用于當(dāng)所述獲取模塊獲取的當(dāng)前狀態(tài)為非接受狀態(tài)時(shí),確定所述當(dāng)前 狀態(tài)為基本狀態(tài)或復(fù)合狀態(tài),其中,所述當(dāng)前狀態(tài)以FA的初始狀態(tài)為起點(diǎn); 讀取模塊,用于當(dāng)所述第一確定模塊確定所述當(dāng)前狀態(tài)為復(fù)合狀態(tài)時(shí),讀取所述待匹 配字符串的未匹配部分的首字符; 第二確定模塊,用于確定所述FA狀態(tài)遷移表中是否存在與所述讀取模塊讀取的所述 首字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng); 遷移模塊,用于當(dāng)所述第二確定模塊確定所述FA狀態(tài)遷移表中存在與所述首字符匹 配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),遷移至所述匹配的基本遷移表項(xiàng)中的下一狀態(tài)。
16. 根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述裝置還包括: 第三確定模塊,用于當(dāng)所述第二確定模塊確定所述FA狀態(tài)遷移表中不存在與所述首 字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),確定所述FA狀態(tài)遷移表中是否存在與所述 首字符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng); 所述讀取模塊還用于當(dāng)所述第三確定模塊確定所述FA狀態(tài)遷移表中存在與所述首字 符部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)時(shí),依次讀取所述未匹配部分中的字符以獲得 第一字符串,其中,所述第一字符串以所述首字符為起點(diǎn)且長度與所述部分匹配的復(fù)合遷 移表項(xiàng)中的匹配條件相對應(yīng); 所述第三確定模塊還用于確定所述讀取模塊讀取的所述第一字符串是否與所述部分 匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全匹配; 所述遷移模塊還用于當(dāng)所述第三確定模塊確定所述第一字符串與所述部分匹配的復(fù) 合遷移表項(xiàng)中的匹配條件完全匹配時(shí),遷移至所述部分匹配的復(fù)合遷移表項(xiàng)中的下一狀 態(tài)。
17. 根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述第三確定模塊具體用于分別將所 述首字符與所述FA狀態(tài)遷移表中包括的所述復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表項(xiàng)中的每個(gè) 復(fù)合遷移表項(xiàng)的匹配條件的起始部分進(jìn)行匹配,以分別確定所述首字符是否與所述每個(gè)復(fù) 合遷移表項(xiàng)部分匹配;以及當(dāng)所述匹配單元所述復(fù)合狀態(tài)的至少一個(gè)復(fù)合遷移表項(xiàng)中存在 與所述首字符部分匹配的復(fù)合遷移表項(xiàng)時(shí),確定所述FA狀態(tài)遷移表中存在與所述首字符 部分匹配的所述復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)。
18. 根據(jù)權(quán)利要求16或17所述的裝置,其特征在于,所述獲取模塊還用于當(dāng)所述第三 確定模塊確定所述第一字符串不能夠與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件完全 匹配時(shí),獲取所述第一字符串中與所述部分匹配的復(fù)合遷移表項(xiàng)中的匹配條件不匹配的第 一個(gè)字符; 所述第三確定模塊還用于確定所述FA狀態(tài)遷移表中是否存在與所述獲取模塊獲取的 所述不匹配的第一個(gè)字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng); 所述遷移模塊還用于當(dāng)所述第三確定模塊確定所述FA狀態(tài)遷移表中存在與所述不匹 配的第一個(gè)字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),遷移至所述匹配的基本遷移表項(xiàng) 中的下一狀態(tài); 所述第一確定模塊還用于當(dāng)所述第三確定模塊確定所述FA狀態(tài)遷移表中不存在與所 述不匹配的第一個(gè)字符匹配的所述復(fù)合狀態(tài)的基本遷移表項(xiàng)時(shí),確定所述待匹配字符串的 匹配結(jié)果為失敗。
19. 根據(jù)權(quán)利要求16至18中任一項(xiàng)所述的裝置,其特征在于,所述第一確定模塊還用 于當(dāng)所述未匹配部分中不存在長度與所述部分匹配的復(fù)合狀態(tài)的復(fù)合遷移表項(xiàng)中的匹配 條件相對應(yīng)的所述第一字符串時(shí),確定所述待匹配字符串的匹配結(jié)果為失敗。
20. 根據(jù)權(quán)利要求15至19中任一項(xiàng)所述的裝置,其特征在于,所述讀取模塊還用于當(dāng) 所述第一確定模塊確定所述當(dāng)前狀態(tài)為基本狀態(tài)時(shí),讀取所述待匹配字符串的未匹配部分 的首字符; 所述第二確定模塊還用于確定所述FA狀態(tài)遷移表中是否存在與所述讀取模塊讀取的 所述首字符匹配的所述基本狀態(tài)的基本遷移表項(xiàng); 所述第一確定模塊還用于當(dāng)所述第二確定模塊確定所述FA狀態(tài)遷移表中不存在與所 述首字符匹配的所述基本狀態(tài)的基本遷移表項(xiàng)時(shí),確定所述待匹配字符串的匹配結(jié)果為失 敗。
【文檔編號】G06F17/30GK104424329SQ201310410575
【公開日】2015年3月18日 申請日期:2013年9月10日 優(yōu)先權(quán)日:2013年9月10日
【發(fā)明者】胡晶, 翟素平 申請人:華為技術(shù)有限公司