專利名稱:匹配規(guī)則包含或運算符的并行多模式匹配的方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明屬于文本或網(wǎng)絡內(nèi)容處理技術領域,尤其涉及一種匹配規(guī)則包含 或運算符的并行多模式匹配的方法及系統(tǒng)。
背景技術:
多模式匹配 (Multiple Pattern String Matching)是計算機科學領域 中的基本問題之一,用于快速判斷某一數(shù)據(jù)塊中是否包含規(guī)則集中的某一或 某些規(guī)則。多模式匹配技術廣泛應用于文本處理、網(wǎng)絡內(nèi)容分析、入侵檢測、 生物信息學、信息檢索等領域。
解決并行多模式匹配問題的經(jīng)典方法之一,是基于有限狀態(tài)自動機的方 法。該方法最初由Alfred V. Aho和Margaret J. Corasick于1975年提 出,通常以發(fā)明者的名字簡稱為AC多模式匹配算法。AC算法的突出優(yōu)點在 于其具有相同的最壞和平均性能,可用于處理各種模式集合(例如不等長、 大規(guī)模),是一種高性能的多模式匹配方法。
對于各種確定性規(guī)則的模式匹配來說,AC算法(以及其變種)無疑是個 非常優(yōu)秀的算法,但卻無法處理含有通配符的非確定性規(guī)則的匹配。
中國專利申請200810104416. 2 "—種并行多模式匹配的方法及系統(tǒng)"提 供了一種應用AC算法來處理含有通配符的非確定規(guī)則的并行多模式匹配的 方法。該發(fā)明公開了一種并行多模式匹配的系統(tǒng),包括
生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配 符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包 含通配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并 將所有子規(guī)則按照AC算法生成AC自動機,并輸出所述AC自動機;
匹配模塊,用于讀取搜索對象和所述AC自動機,按AC算法應用所述AC 自動機進行搜索,判斷所述搜索對象是否按子規(guī)則在所述匹配規(guī)則中的順序
匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī) 則,并輸出匹配結果。
在具體的搜索過程中,當用AC算法匹配成功一個子規(guī)則后,按子規(guī)則標 識査找匹配狀態(tài)表,獲得子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)和最近匹配的子 規(guī)則順序號,比較子規(guī)則順序號和最近匹配的子規(guī)則順序號,如果子規(guī)則順 序號比最近匹配的子規(guī)則順序號大1,則根據(jù)子規(guī)則順序號和子規(guī)則總數(shù)判 斷所述子規(guī)則是否是最后一個子規(guī)則,如果是,則搜索對象同匹配規(guī)則匹配, 如果不是,則更新匹配狀態(tài)表中最近匹配子規(guī)則順序號為當前匹配子規(guī)則的 順序號。
上述發(fā)明將每個含有通配符的規(guī)則分解成多個子規(guī)則,并逐個檢查各個
子規(guī)則是否按順序匹配成功。該方法解決了用AC算法來處理含有通配符的非 確定規(guī)則,例如"334566*990000",的并行多模式匹配問題,但該方法僅能 用來處理兩個子模式之間的字符是任意的、長度也是任意的這種形式。如果 要匹配兩個子模式是"或"關系的規(guī)則,如"3345661990000",其中或運算 符"I "表示搜索對象同子模式"334566"或"990000"中的至少一個匹配成 功,則整個模式即為匹配成功,則上述發(fā)明則無法處理。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了一種匹配規(guī)則包含或運算符的并行多模 式匹配的方法及系統(tǒng),從而能夠應用AC算法對包含有或運算符的匹配規(guī)則進 行匹配。
本發(fā)明公開了一種匹配規(guī)則包含或運算符的并行多模式匹配的系統(tǒng),包
括
生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含或運 算符的匹配規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則為 確定規(guī)則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將
所有子規(guī)則按照AC算法生成AC自動機;
匹配模塊,用于讀取搜索對象,按AC算法應用所述AC自動機進行搜索, 判斷所述搜索對象是否匹配所述匹配規(guī)則的至少一個子規(guī)則,如果是,則所
述搜索對象匹配所述匹配規(guī)則,并輸出匹配結果。
所述生成模塊進一歩包括規(guī)則解析模塊和節(jié)點處理模塊, 所述規(guī)則解析模塊,用于進行所述將所述規(guī)則集中包含或運算符的匹配 規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中為確定規(guī)則 的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動 機的過程,并在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則; 所述節(jié)點處理模塊,用于生成節(jié)點規(guī)則表,所述節(jié)點規(guī)則表記錄在所述 AC自動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識,以供所述匹配模塊在搜索
時進行查找;
所述在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則進一 步為標識所述匹配規(guī)則,并使用所述子規(guī)則所屬匹配規(guī)則的標識來標識所述 子規(guī)則。
所述匹配模塊進一步包括
狀態(tài)轉移模塊,用于進行所述讀取搜索對象,按AC算法應用所述AC自 動機進行搜索的過程;
處理模塊,用于查找所述節(jié)點規(guī)則表,依次獲得當前終態(tài)節(jié)點匹配的子 規(guī)則的標識,確定所述搜索對象同當前終態(tài)節(jié)點匹配的子規(guī)則所屬的匹配規(guī) 則匹配,并輸出該匹配規(guī)則的標識。
本發(fā)明還公開了一種匹配規(guī)則包含或運算符的并行多模式匹配的方法, 包括
步驟1,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含或運算符的 匹配規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則為確定規(guī) 則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子 規(guī)則按照AC算法生成AC自動機,并輸出所述AC自動機;
步驟2,讀取搜索對象和所述AC自動機,按AC算法應用所述AC自動機 進行搜索,判斷所述搜索對象是否匹配所述匹配規(guī)則的至少一個子規(guī)則,如 果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹配結果。
所述步驟1進一步包括,
步驟61,在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則;
步驟62,在生成所述AC自動機后,生成節(jié)點規(guī)則表,記錄在所述AC自 動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識,以供在搜索時進行査找;
所述步驟61進一步為標識所述匹配規(guī)則,并使用所述子規(guī)則所屬匹配規(guī) 則的標識來標識所述子規(guī)則。
所述步驟2進一步包括,
步驟81,讀取搜索對象的一個字符,按所述AC算法進行在所述AC自動 機中進行狀態(tài)轉移,轉移到一個狀態(tài)節(jié)點,執(zhí)行步驟82;
步驟82,判斷該狀態(tài)節(jié)點是否是終態(tài)節(jié)點,如果是,査找所述節(jié)點規(guī)則 表,依次獲得匹配的子規(guī)則標識,確定所述搜索對象同當前終態(tài)節(jié)點匹配的子 規(guī)則所屬的匹配規(guī)則匹配,并輸出該匹配規(guī)則的標識,執(zhí)行步驟81直至所述 搜索對象被讀取完。
本發(fā)明的有益效果在于,通過將含有或運算符的匹配規(guī)則在或運算符處 分割成子規(guī)則,使得AC算法可以用于包含或運算符的匹配規(guī)則,進而實現(xiàn)對 含有或運算符的匹配規(guī)則的并行多模式匹配。
圖1是本發(fā)明的系統(tǒng)結構示意圖2是本發(fā)明的方法流程圖3是本發(fā)明的自動機生成模塊結構示意圖4是本發(fā)明的匹配模塊結構示意圖5是本發(fā)明方法具體實施例的流程圖。
具體實施例方式
下面結合附圖,對本發(fā)明做進一步的詳細描述。 本發(fā)明系統(tǒng),包括生成模塊101和匹配模塊K)2組成,如圖1所示。 生成模塊101,用于讀取包含或運算符的匹配規(guī)則的規(guī)則集,將該規(guī)則 集中包含或運算符的匹配規(guī)則從或運算符處分割成該匹配規(guī)則的子規(guī)則,該 子規(guī)則為確定規(guī)則,規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則, 將規(guī)則集中匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,從而使替換后的規(guī)則集中
包含的匹配規(guī)則都為確定規(guī)則,按照AC算法生成對應于替換后的規(guī)則集的 AC自動機,對于為確定規(guī)則的匹配規(guī)則,由于其子規(guī)則是其自身,所以規(guī)則 集中為確定規(guī)則的匹配規(guī)則可以不做替換直接保留。
所述確定規(guī)則,是規(guī)則中每個字符都已知,不包含不明確的字符,所述 不確定的字符如通配符或或運算符。
匹配模塊102,用于讀取搜索對象,按AC算法應用所述AC自動機進行 搜索,判斷該搜索對象是否匹配匹配規(guī)則中的至少一個子規(guī)則,如果是,則 所述搜索對象匹配該匹配規(guī)則,并輸出匹配結果。
本發(fā)明的方法如圖2所示,包括
步驟S201,讀取包含或運算符的匹配規(guī)則的規(guī)則集,將該規(guī)則集中包含 或運算符的匹配規(guī)則從或運算符處分割成該匹配規(guī)則的子規(guī)則,該子規(guī)則為 確定規(guī)則,規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,將規(guī)則集 中匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,從而使替換后的規(guī)則集中包含的匹 配規(guī)則都為確定規(guī)則,按照AC算法生成對應于替換后的規(guī)則集的AC自動機, 并輸出AC自動機,對于為確定規(guī)則的匹配規(guī)則,由于其子規(guī)則是其自身,所 以規(guī)則集中為確定規(guī)則的匹配規(guī)則可以不做替換直接保留。
步驟S202,讀取搜索對象,按AC算法應用AC自動機進行搜索,判斷該 搜索對象是否匹配規(guī)則中的至少一個子規(guī)則,如果是,則所述搜索對象匹配 該匹配規(guī)則,并輸出匹配結果。
生成模塊101還用以生成節(jié)點規(guī)則表。
生成模塊101包括,規(guī)則解析模塊301和節(jié)點處理模塊302,如圖3所示。
規(guī)則解析模塊301,用于逐條判斷規(guī)則集中的匹配規(guī)則是否包含或運算 符,如果包含,則查找匹配規(guī)則中或運算符的位置,在或運算符位置處將匹 配規(guī)則分割為子規(guī)則,該子規(guī)則為確定規(guī)則;如果不包含并且匹配規(guī)則為確 定規(guī)則,則該匹配規(guī)則作為其自身的子規(guī)則,將規(guī)則集中的匹配規(guī)則用該匹 配規(guī)則的子規(guī)則替換,使規(guī)則集轉換為僅包含確定規(guī)則的規(guī)則集,并用子規(guī) 則所屬的匹配規(guī)則的標識來標識該子規(guī)則。
例如, 一個匹配規(guī)則為"334566 I 990000",標識該匹配規(guī)則為23,該
規(guī)則包含一個或運算符"I ",說明只要與子規(guī)則"990000"或與子規(guī)則 "334566"中至少一個匹配成功即可。該規(guī)則被分割為兩個子規(guī)則"334566" 和"990000",它們的子規(guī)別標識均為"23"。又如, 一個不含或運算符的匹 配規(guī)則"323457789"標識為24,則該匹配規(guī)則的子規(guī)則標識仍為"24"。
節(jié)點處理模塊302,用于生成節(jié)點規(guī)則表,記錄在所述AC自動機中的終 態(tài)節(jié)點處匹配的所有子規(guī)則。
具體實施方式
為,對應于每個終態(tài)節(jié)點建立一 個鏈表,鏈表中存有該終態(tài)節(jié)點對應的子規(guī)則標識。
匹配模塊102包括,狀態(tài)轉移模塊401和處理模塊402,如圖4所示。
狀態(tài)轉移模塊401,用于應用AC自動機,根據(jù)讀取的搜索對象的字符, 按AC算法進行搜索。
具體實施方式
為用一個整數(shù)S表示AC自動機的當前 狀態(tài),初始時S為初始狀態(tài)O,每讀取一個搜索對象的字符,就在AC自動機 中査找,確定下一狀態(tài),并修改S值為該狀態(tài)。
處理模塊402,用于在當前狀態(tài)節(jié)點為終態(tài)節(jié)點時,査找節(jié)點規(guī)則表并 依次輸出當前終態(tài)節(jié)點匹配的子規(guī)則標識,確定所述搜索對象同當前終態(tài)節(jié) 點匹配的子規(guī)則所屬的匹配規(guī)則匹配,并輸出該匹配規(guī)則的標識。
將該終態(tài)節(jié)點對應的所有子規(guī)則處理完后,讀取下一個字符,按AC算法 搜索。
本發(fā)明的方法的具體實施例如圖5所示。 步驟S501,讀取規(guī)則集。
步驟S502,標識所述規(guī)則集的匹配規(guī)則,判斷規(guī)則集的匹配規(guī)則中是否 包含或運算符,如果包含,在或運算符處將匹配規(guī)則劃分成為確定規(guī)則的子 規(guī)則,如果不包含并且匹配規(guī)則為確定規(guī)則,則所述匹配規(guī)則作為其自身的 子規(guī)則,然后將所有子規(guī)則按AC算法生成AC自動機,并生成節(jié)點規(guī)則表。
節(jié)點規(guī)則表,記錄在所述AC自動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則, 子規(guī)則用其所屬匹配規(guī)則的標識來標識。
步驟S503,如果搜索對象已讀取完畢,則結束流程,否則讀取搜索對象 的一個字符。
步驟S504,按AC算法轉移狀態(tài)。
步驟S505,判斷狀態(tài)節(jié)點是否為終態(tài)節(jié)點,如果是,執(zhí)行步驟S506,否
則,執(zhí)行歩驟S503。
步驟S506,査找節(jié)點規(guī)則表,獲得該終態(tài)節(jié)點匹配的子規(guī)則的標識,確 定所述搜索對象同當前終態(tài)節(jié)點匹配的子規(guī)則所屬的匹配規(guī)則匹配,并輸出 該匹配規(guī)則的標識。
步驟S507,判斷該終態(tài)節(jié)點處是否還有匹配的子規(guī)則,如果有,執(zhí)行步 驟S506,否則,執(zhí)行步驟S503。
本領域的技術人員在不脫離權利要求書確定的本發(fā)明的精神和范圍的條 件下,還可以對以上內(nèi)容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限 于以上的說明,而是由權利要求書的范圍來確定的。
權利要求
1. 一種匹配規(guī)則包含或運算符的并行多模式匹配的系統(tǒng),其特征在于,包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含或運算符的匹配規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則為確定規(guī)則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動機;匹配模塊,用于讀取搜索對象,按AC算法應用所述AC自動機進行搜索,判斷所述搜索對象是否匹配所述匹配規(guī)則的至少一個子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹配結果。
2. 如權利要求1所述的匹配規(guī)則包含或運算符的并行多模式匹配的系統(tǒng),其特征在于,所述生成模塊進一歩包括規(guī)則解析模塊和節(jié)點處理模塊, 所述規(guī)則解析模塊,用于進行所述將所述規(guī)則集中包含或運算符的匹配 規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動機的過程,并在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則;所述節(jié)點處理模塊,用于生成節(jié)點規(guī)則表,所述節(jié)點規(guī)則表記錄在所述AC自動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識,以供所述匹配模塊在搜索 時進行査找。
3. 如權利要求2所述的匹配規(guī)則包含或運算符的并行多模式匹配的系 統(tǒng),其特征在于,所述在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則 的子規(guī)則進一步為標識所述匹配規(guī)則,并使用所述子規(guī)則所屬匹配規(guī)則的標 識來標識所述子規(guī)則。
4. 如權利要求2所述的匹配規(guī)則包含或運算符的并行多模式匹配的系 統(tǒng),其特征在于,所述匹配模塊進一步包括狀態(tài)轉移模塊,用于進行所述讀取搜索對象,按AC算法應用所述AC自 動機進行搜索的過程;處理模塊,用于査找所述節(jié)點規(guī)則表,依次獲得當前終態(tài)節(jié)點匹配的子規(guī)則的標識,確定所述搜索對象同當前終態(tài)節(jié)點匹配的子規(guī)則所屬的匹配規(guī) 則匹配,并輸出該匹配規(guī)則的標識。
5. —種匹配規(guī)則包含或運算符的并行多模式匹配的方法,其特征在于, 包括步驟1,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含或運算符的 匹配規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則為確定規(guī) 則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子 規(guī)則按照AC算法生成AC自動機,并輸出所述AC自動機;步驟2,讀取搜索對象和所述AC自動機,按AC算法應用所述AC自動機 進行搜索,判斷所述搜索對象是否匹配所述匹配規(guī)則的至少一個子規(guī)則,如 果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹配結果。
6. 如權利要求5所述的匹配規(guī)則包含或運算符的并行多模式匹配的方 法,其特征在于,所述步驟l進一步包括,步驟61,在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則; 步驟62,在生成所述AC自動機后,生成節(jié)點規(guī)則表,記錄在所述AC自 動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識,以供在搜索時進行查找:。
7. 如權利要求6所述的匹配規(guī)則包含或運算符的并行多模式匹配的方 法,其特征在于,所述步驟61進一步為標識所述匹配規(guī)則,并使用所述子規(guī) 則所屬匹配規(guī)則的標識來標識所述子規(guī)則。
8. 如權利要求5所述的匹配規(guī)則包含或運算符的并行多模式匹配的方 法,其特征在于,所述步驟2進一步包括,步驟81,讀取搜索對象的一個字符,按所述AC算法進行在所述AC自動 機中進行狀態(tài)轉移,轉移到一個狀態(tài)節(jié)點,執(zhí)行步驟82;步驟82,判斷該狀態(tài)節(jié)點是否是終態(tài)節(jié)點,如果是,査找所述節(jié)點規(guī)則 表,依次獲得匹配的子規(guī)則標識,確定所述搜索對象同當前終態(tài)節(jié)點匹配的子 規(guī)則所屬的匹配規(guī)則匹配,并輸出該匹配規(guī)則的標識,執(zhí)行步驟81直至所述 搜索對象被讀取完。
全文摘要
本發(fā)明公開了一種匹配規(guī)則包含或運算符的并行多模式匹配的系統(tǒng)及方法,系統(tǒng)包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含或運算符的匹配規(guī)則從或運算符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則為確定規(guī)則,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動機;匹配模塊,用于讀取搜索對象,按AC算法應用所述AC自動機進行搜索,判斷所述搜索對象是否匹配所述匹配規(guī)則的至少一個子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹配結果。本發(fā)明能夠應用AC算法對包含有或運算符的匹配規(guī)則進行匹配。
文檔編號G06F17/30GK101388044SQ20081022556
公開日2009年3月18日 申請日期2008年11月5日 優(yōu)先權日2008年11月5日
發(fā)明者葉潤國, 博 李, 王雷章, 胡振宇, 煒 鄧 申請人:北京啟明星辰信息技術股份有限公司;北京啟明星辰信息安全技術有限公司