專利名稱:匹配規(guī)則包含位移指示符的并行多模式匹配的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于文本或網(wǎng)絡內(nèi)容處理技術(shù)領(lǐng)域,尤其涉及一種匹配規(guī)則包含 位移指示符的并行多模式匹配的方法及系統(tǒng)。
背景技術(shù):
多模式匹配 (Multiple Pattern String Matching)是計算機科學領(lǐng)域 中的基本問題之一,用于快速判斷某一數(shù)據(jù)塊中是否包含規(guī)則集中的某一或 某些規(guī)則。多模式匹配技術(shù)廣泛應用于文本處理、網(wǎng)絡內(nèi)容分析、入侵檢測、 生物信息學、信息檢索等領(lǐng)域。
解決并行多模式匹配問題的經(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ī) 則,并輸出匹配結(jié)果。
在具體的搜索過程中,當用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",的并行多模式匹配問題,但該方法僅能 用來處理兩個子模式之間的字符是任意的、長度也是任意的這種形式。如果 要更加精確指明兩個子模式之間的位移,如"334566{2, 10}990000"(其中的 位移指示符{2, 10}表示,在子模式"334566"和"990000"之間的位移量是 2至10個字符),則上述發(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ī)則作為其自身
的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動機;
匹配模塊,用于讀取搜索對象,按AC算法應用所述AC自動機進行搜索,
判斷所述搜索對象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則 的所有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按所述子規(guī)則對應的 位移量匹配所述子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸 出匹配結(jié)果。
所述生成模塊進一步包括規(guī)則解析模塊、匹配狀態(tài)表生成模塊和節(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ī)則對應的位移量,以供所述匹配模塊在搜索時進行査找;
所述匹配狀態(tài)表生成模塊,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的 一行對應于所述規(guī)則集中的一個匹配規(guī)則,每行記錄對應匹配規(guī)則包含的子 規(guī)則總數(shù)、最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,以 供所述匹配模塊在搜索時進行査找。
所述在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則進一 步為標識所述匹配規(guī)則,使用所述子規(guī)則所屬匹配規(guī)則的標識和所述子規(guī)則 在匹配規(guī)則中的順序號標識所述子規(guī)則。
匹配規(guī)則的第一個子規(guī)則的順序號為1,
所述節(jié)點處理模塊,還用于在終態(tài)節(jié)點處匹配的子規(guī)則為匹配規(guī)則的第 一個子規(guī)則時,將所述子規(guī)則對應的位移量記錄為0,并記錄所述所有子規(guī) 則的字符數(shù);
所述匹配狀態(tài)表生成模塊,還用于將所述匹配狀態(tài)表中的最近匹配的子 規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置初始化為0; 所述匹配模塊進一步包括
狀態(tài)轉(zhuǎn)移模塊,用于進行所述讀取搜索對象,按AC算法應用所述AC自
動機進行搜索的過程;
處理模塊,用于査找所述節(jié)點規(guī)則表,獲得當前終態(tài)節(jié)點匹配的子規(guī)則 的標識、所述子規(guī)則對應的位移量和所述子規(guī)則的字符數(shù),按所述子規(guī)則標 識査找所述匹配狀態(tài)表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)、最近 匹配的子規(guī)則順序號和最近匹配的子規(guī)則的匹配位置,比較所述子規(guī)則順序 號和所述最近匹配的子規(guī)則順序號,所述子規(guī)則匹配位置和所述最近匹配的 子規(guī)則匹配位置,如果所述子規(guī)則順序號同所述最近匹配的子規(guī)則順序號的 差值等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)符合所述子規(guī)則對應的位移量,則根據(jù)所 述子規(guī)則順序號和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否是最后一個子規(guī)則, 如果是,則所述搜索對象同所述匹配規(guī)則匹配,如果不是,則更新匹配狀態(tài) 表中所述最近匹配子規(guī)則順序號為所述子規(guī)則的順序號,所述最近匹配子規(guī) 則的匹配位置為所述子規(guī)則的匹配位置。
本發(fā)明還公開了一種匹配規(guī)則包含位移指示符的并行多模式匹配的方 法,包括
步驟1,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含位移指示符 的匹配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,每個所述子規(guī)則 為確定規(guī)則,連接于所述位移指示符后的子規(guī)則對應的位移量為所述位移指 示符規(guī)定的位移量,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī) 則,并將所有子規(guī)則按照AC算法生成AC自動機;
步驟2,讀取搜索對象,按AC算法應用所述AC自動機進行搜索,判斷 所述搜索對象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所 有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按所述子規(guī)則對應的位移 量匹配所述子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹 配結(jié)果。
所述步驟1進一步包括,
步驟61,在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則;
步驟62,在生成所述AC自動機后,生成節(jié)點規(guī)則表,記錄在所述AC自 動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識和所述連接于位移指示符后的子
規(guī)則對應的位移量,以供在搜索時進行査找;
步驟63, ^fe成匹配狀態(tài)表,所述匹配狀態(tài)表中的一行對應于所述規(guī)則集 中的一個匹配規(guī)則,每行記錄對應匹配規(guī)則包含的子規(guī)則總數(shù)、最近匹配的 子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,以供在搜索時進行查找。
所述步驟61進一步為標識所述匹配規(guī)則,使用所述子規(guī)則所屬匹配規(guī)則 的標識和所述子規(guī)則在匹配規(guī)則中的順序號標識所述子規(guī)則。
匹配規(guī)則的第一個子規(guī)則的順序號為1,
所述步驟62,還包括在終態(tài)節(jié)點處匹配的子規(guī)則為匹配規(guī)則的第一個子 規(guī)則時,將所述子規(guī)則對應的位移量記錄為0,并記錄所述所有子規(guī)則的字 符數(shù);
所述步驟63,還包括將所述匹配狀態(tài)表中的最近匹配的子規(guī)則的順序號 和最近匹配的子規(guī)則的匹配位置初始化為0; 所述步驟2進一步包括,
步驟81,査找所述節(jié)點規(guī)則表以獲得匹配的子規(guī)則標識、所述子規(guī)則對 應的位移量和所述子規(guī)則的字符數(shù),査找匹配狀態(tài)表,獲得所述子規(guī)則所屬 匹配規(guī)則的子規(guī)則總數(shù)、最近匹配的子規(guī)則順序號和最近匹配的子規(guī)則的匹 配位置;
歩驟82,判斷所述子規(guī)則順序號同所述最近匹配的子規(guī)則順序號的差值 是否等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)是否符合所述子規(guī)則對應的位移量,如果 是,則執(zhí)行步驟83;
步驟83,根據(jù)所述子規(guī)則順序號和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否 是最后一個子規(guī)則,如果是,則所述搜索對象同所述匹配規(guī)則匹配,如果不 是,則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號為所述子規(guī)則的順序號, 所述最近匹配子規(guī)則的匹配位置為所述子規(guī)則的匹配位置。
本發(fā)明的有益效果在于,通過將含有位移指示符的匹配規(guī)則在位移指示 符處分割成子規(guī)則,使得AC算法可以用于包含位移指示符的匹配規(guī)則,進而 實現(xiàn)對含有位移指示符的匹配規(guī)則的并行多模式匹配。
圖1是本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖; 圖2是本發(fā)明的方法流程圖3是本發(fā)明的自動機生成模塊結(jié)構(gòu)示意圖; 圖4是本發(fā)明的匹配模塊結(jié)構(gòu)示意圖5是本發(fā)明方法具體實施例的流程圖。
具體實施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及 實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施 例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明系統(tǒng),包括生成模塊101和匹配模塊102組成,如圖1所示。 生成模塊101,用于讀取包含匹配規(guī)則的規(guī)則集,將規(guī)則集中包含位移
指示符的匹配規(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ī)則中每個字符都已知,不包含不明確的字符,如通 配符或位移指示符的規(guī)則。
匹配模塊102,用于讀取搜索對象,按AC算法應用所述AC自動機進行 搜索,判斷搜索對象是否按子規(guī)則在匹配規(guī)則中的順序匹配該匹配規(guī)則的所 有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按該子規(guī)則對應的位移量 匹配該子規(guī)則,,如果是,則搜索對象匹配該匹配規(guī)則,并輸出匹配結(jié)果。
本發(fā)明的方法如圖2所示,包括
步驟S201,讀取包含匹配規(guī)則的規(guī)則集,將規(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,判斷所述搜索對象是否按子規(guī)則在匹配規(guī)則中的順序匹配該 匹配規(guī)則的所有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按該子規(guī)則 對應的位移量匹配該子規(guī)則,如果是,則搜索對象匹配該匹配規(guī)則,并輸出 匹配結(jié)果。
生成模塊101還用以生成匹配狀態(tài)表和節(jié)點規(guī)則表。
匹配狀態(tài)表用以記錄匹配規(guī)則的子規(guī)則總數(shù)、最近匹配的子規(guī)則的順序 號和最近匹配的子規(guī)則的匹配位置,節(jié)點規(guī)則表用以記錄在AC自動機的終態(tài) 節(jié)點處匹配的所有子規(guī)則、每個子規(guī)則對應的位移量和子規(guī)則的字符數(shù)。
生成模塊101包括,規(guī)則解析模塊301、匹配狀態(tài)表生成模塊302、和節(jié) 點處理模塊303,如圖3所示。
規(guī)則解析模塊301,用于逐條判斷規(guī)則集中的匹配規(guī)則是否包含位移指 示符,如果包含,則查找匹配規(guī)則中位移指示符的位置,在位移指示符位置 處將匹配規(guī)則分割為子規(guī)則,該子規(guī)則為確定規(guī)則;如果不包含并且匹配規(guī) 則為確定規(guī)則,則所述匹配規(guī)則作為其自身的子規(guī)則,將規(guī)則集中的匹配規(guī) 則用該匹配規(guī)則的子規(guī)則替換,使規(guī)則集轉(zhuǎn)換為僅包含確定規(guī)則的規(guī)則集, 并用子規(guī)則所屬的匹配規(guī)則的標識和該子規(guī)則在該匹配規(guī)則中的順序號標識 該子規(guī)則。匹配規(guī)則的第一個子規(guī)則的順序號為1。
例如, 一個匹配規(guī)則為334566{2, 10}990000,標識該匹配規(guī)則為23,該 規(guī)則包含一個位移指示符為{2, 10},說明位移指示符規(guī)定的子規(guī)則990000 與子規(guī)則334566的位移量最小是2,最大是10。如果位移指示符的第二項為 空(如{2,})則表示最大位移不限。該規(guī)則被分割為兩個子規(guī)則"334566"
和"990000",子規(guī)則的順序號分別是1和2。采用二維數(shù)組將兩個子規(guī)則分 別標識為(23, 1)和(23, 2)。又如, 一個不含通配符的匹配規(guī)則"323457789" 標識為24,則該匹配規(guī)則的子規(guī)則標識為(24,1)。
匹配狀態(tài)表生成模塊302,用于生成匹配狀態(tài)表。匹配狀態(tài)表中的一行 對應于規(guī)則集中的一個匹配規(guī)則,每行記錄對應匹配規(guī)則包含的子規(guī)則總數(shù)、 最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,以供匹配模塊 102在獲得當前匹配的子規(guī)則標識和當前搜索的位置后,依據(jù)該匹配的子規(guī) 則標識査找匹配狀態(tài)表。其中,最近匹配的子規(guī)則為在當前匹配前最后一次 匹配的子規(guī)則。
例如,規(guī)則集中有N個匹配規(guī)則,建立一個NX3的二維表格,其中行號 表示匹配規(guī)則的標識,第1列表示該匹配規(guī)則包含的子規(guī)則總數(shù),第2列表 示最近匹配的子規(guī)則的順序號,第3列表示最近匹配的子規(guī)則的匹配位置, 并且每個匹配規(guī)則的最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配 位置均初始化為0。
子規(guī)則的匹配位置,為該子規(guī)則在搜索對象中匹配的字符串中最后一個 字符在搜索對象中的位置。例如,子規(guī)則為"123",搜索對象為"2312345", 則該子規(guī)則的匹配位置為5。
節(jié)點處理模塊303,用于生成節(jié)點規(guī)則表,記錄在AC自動機中的終態(tài)節(jié) 點處匹配的所有子規(guī)則和每個子規(guī)則對應的位移量和該子規(guī)則的字符數(shù),子 規(guī)則對應的位移量為該子規(guī)則與該子規(guī)則所屬匹配規(guī)則中的前一子規(guī)則的位 移量,匹配規(guī)則的第一個子規(guī)則對應的位移量為0。
具體實施方式
為,對應于每個終態(tài)節(jié)點建立一個鏈表,鏈表中存有該終 態(tài)節(jié)點對應的子規(guī)則標識、每個子規(guī)則對應的位移量和該子規(guī)則的字符數(shù)。 其中的子規(guī)則標識為所述的二維數(shù)組,例如(23,2),表示第23條匹配規(guī)則 的第2個子規(guī)則以該狀態(tài)節(jié)點為終態(tài)節(jié)點。其中,子規(guī)則對應的位移量也為 二維數(shù)組,例如{2, 10},表示該子規(guī)則與該子規(guī)則所屬匹配規(guī)則中的前一子 規(guī)則的位移量最小是2,最大是10。如果位移指示符的第二項為空(如"{2, }") 則表示最大位移不限。
匹配模塊102包括,狀態(tài)轉(zhuǎn)移模塊401和處理模塊402,如圖4所示。
狀態(tài)轉(zhuǎn)移模塊401,用于應用AC自動機,根據(jù)讀取的搜索對象的字符, 按AC算法進行搜索。
具體實施方式
為用一個整數(shù)P表示當前搜索位置,初 始時P為開始位置O。用一個整數(shù)S表示AC自動機的當前狀態(tài),初始時S為 初始狀態(tài)O,每讀取一個搜索對象的字符,位置P就增加1,同時在AC自動 機中査找,確定下一狀態(tài),并修改S值為該狀態(tài)。
處理模塊402,用于在當前狀態(tài)節(jié)點為終態(tài)節(jié)點時,査找節(jié)點規(guī)則表以 獲得當前終態(tài)節(jié)點匹配的子規(guī)則標識、子規(guī)則對應的位移量和該子規(guī)則的字 符數(shù),當前的搜索位置為當前終態(tài)節(jié)點匹配的子規(guī)則的匹配位置,按子規(guī)則 標識査找匹配狀態(tài)表,獲得該子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)、最近匹配 的子規(guī)則順序號和最近匹配的子規(guī)則的匹配位置,比較該子規(guī)則順序號和獲 得的最近匹配的子規(guī)則順序號,比較子規(guī)則的匹配位置與最近匹配的子規(guī)則 的匹配位置,如果該子規(guī)則順序號同最近匹配的子規(guī)則順序號的差值等于1, 并且子規(guī)則的匹配位置同獲得的最近匹配的子規(guī)則的匹配位置的差值減去該 子規(guī)則的字符數(shù)符合該子規(guī)則對應的位移量,則根據(jù)該子規(guī)則順序號和獲得 的子規(guī)則總數(shù)判斷該子規(guī)則是否是最后一個子規(guī)則,如果是,則搜索對象同 該子規(guī)則所屬匹配規(guī)則匹配,如果不是,則更新匹配狀態(tài)表中最近匹配子規(guī) 則順序號為該子規(guī)則的順序號,最近匹配子規(guī)則的匹配位置為該子規(guī)則的匹 配位置。
具體實施方式
如下。
在當前終態(tài)節(jié)點的鏈表中逐一査找每個子規(guī)則,對于每個子規(guī)則,根據(jù) 其標識確定其所屬的匹配規(guī)則,査找匹配狀態(tài)表獲得該匹配規(guī)則的子規(guī)則總 數(shù)、最近匹配的子規(guī)則的順序號以及最近匹配的子規(guī)則匹配位置。
判斷鏈表中査找的子規(guī)則的順序號是否比匹配狀態(tài)表中最近匹配子規(guī)則 的順序號大1,并且子規(guī)則的匹配位置與最近匹配的子規(guī)則的匹配位置的差 值減去該子規(guī)則字符數(shù)是否符合該子規(guī)則對應的位移量,如果是,則根據(jù)子 規(guī)則總數(shù)和該子規(guī)則的順序號判斷該子規(guī)則是否是最后一個子規(guī)則,如果是 最后一個子規(guī)則,則搜索對象匹配該子規(guī)則所屬的匹配規(guī)則,輸出該匹配規(guī) 則;如果不是最后一個子規(guī)則,并且鏈表中査找的子規(guī)則的順序號比匹配狀 態(tài)表中最近匹配子規(guī)則的順序號大1,并且所述子規(guī)則的匹配位置與匹配狀
態(tài)表中最近匹配的子規(guī)則的匹配位置差值減去該子規(guī)則字符數(shù)符合該子規(guī)則 對應的位移量,則更新匹配狀態(tài)表中記錄的最近匹配子規(guī)則為該子規(guī)則的順 序號,最近匹配子規(guī)則的匹配位置為該子規(guī)則的匹配位置。
將該終態(tài)節(jié)點對應的所有子規(guī)則按上述方法處理完后,讀取下一個字符,
將搜索位置加l,按AC算法搜索。
本發(fā)明的方法的具體實施例如圖5所示。 步驟S501,讀取規(guī)則集。
步驟S502,標識所述規(guī)則集的匹配規(guī)則,判斷規(guī)則集的匹配規(guī)則中是否 包含位移指示符,如果包含,在位移指示符處將匹配規(guī)則劃分成為確定規(guī)則 的子規(guī)則,如果不包含并且匹配規(guī)則為確定規(guī)則,則所述匹配規(guī)則作為其自 身的子規(guī)則,然后將所有子規(guī)則按AC算法生成AC自動機,并生成節(jié)點規(guī)則 表和匹配狀態(tài)表。
節(jié)點規(guī)則表,記錄在所述AC自動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則、 子規(guī)則對應的位移量和該子規(guī)則的字符數(shù),子規(guī)則用其所屬匹配規(guī)則的標識 和該子規(guī)則在匹配規(guī)則中的順序號標識,包含位移指示符的匹配規(guī)則中連接 于位移指示符后的子規(guī)則對應的位移量為位移指示符規(guī)定的位移量,匹配規(guī) 則中第一個子規(guī)則對應的位移量為0。
匹配狀態(tài)表中的每一行對應于一個匹配規(guī)則,記錄該匹配規(guī)則的子規(guī)則 總數(shù)、最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,每個匹 配規(guī)則的最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置初始化 為0。
子規(guī)則的匹配位置,為該子規(guī)則在搜索對象中匹配的字符串中最后一個 字符在搜索對象中的位置。
步驟S503,讀取搜索對象。 步驟S504,按AC算法轉(zhuǎn)移狀態(tài)。
步驟S505,判斷狀態(tài)節(jié)點是否為終態(tài)節(jié)點,如果是,執(zhí)行步驟S506,否 則,執(zhí)行步驟S503。
步驟S506,査找節(jié)點規(guī)則表,獲得該終態(tài)節(jié)點匹配的子規(guī)則的標識、子 規(guī)則對應的位移量和該子規(guī)則的字符數(shù)。
步驟S507,按子規(guī)則標識中的所屬匹配規(guī)則的標識査找匹配狀態(tài)表,獲
得該子規(guī)則所屬匹配規(guī)則對應的子規(guī)則總數(shù)、最近匹配子規(guī)則的順序號和最 近匹配的子規(guī)則的匹配位置,判斷該子規(guī)則的順序號是否比所屬匹配規(guī)則對 應的最近匹配子規(guī)則的順序號大1,并且該子規(guī)則的匹配位置與最近匹配的 子規(guī)則的匹配位置的差值減去該子規(guī)則字符數(shù)是否符合該子規(guī)則對應的位移
量,如果是,執(zhí)行步驟S508,否則執(zhí)行步驟S510。
步驟S508,同所屬匹配規(guī)則的子規(guī)則總數(shù)比較,判斷該子規(guī)則是否是最 后一個子規(guī)則,如果是,輸出匹配結(jié)果,執(zhí)行步驟S510,否則,執(zhí)行步驟S509。
步驟S509,更新匹配狀態(tài)表中匹配規(guī)則對應的最近匹配的子規(guī)則的順序 號為該子規(guī)則的順序號,最近匹配的子規(guī)則匹配位置為該子規(guī)則匹配位置。
歩驟S510,判斷該終態(tài)節(jié)點處是否還有匹配的子規(guī)則,如果有,執(zhí)行步 驟S506,否則,執(zhí)行步驟S503。
執(zhí)行上述流程,直到搜索對象被讀取完為止。
本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條 件下,還可以對以上內(nèi)容進行各種各樣的修改。因此本發(fā)明的范圍并不僅限 于以上的說明,而是由權(quán)利要求書的范圍來確定的。
權(quán)利要求
1. 一種匹配規(guī)則包含位移指示符的并行多模式匹配的系統(tǒng),其特征在于,包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含位移指示符的匹配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,每個所述子規(guī)則為確定規(guī)則,連接于所述位移指示符后的子規(guī)則對應的位移量為所述位移指示符規(guī)定的位移量,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動機;匹配模塊,用于讀取搜索對象,按AC算法應用所述AC自動機進行搜索,判斷所述搜索對象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按所述子規(guī)則對應的位移量匹配所述子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹配結(jié)果。
2. 如權(quán)利要求1所述的匹配規(guī)則包含位移指示符的并行多模式匹配的系 統(tǒng),其特征在于,所述生成模塊進一步包括規(guī)則解析模塊、匹配狀態(tài)表生成 模塊和節(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ī)則對應的位移量,以供所述匹配模塊在搜索時進行査找;所述匹配狀態(tài)表生成模塊,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的 一行對應于所述規(guī)則集中的一個匹配規(guī)則,每行記錄對應匹配規(guī)則包含的子 規(guī)則總數(shù)、最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,以 供所述匹配模塊在搜索時進行査找。
3. 如權(quán)利要求2所述的匹配規(guī)則包含位移指示符的并行多模式匹配的系 統(tǒng),其特征在于,所述在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則 的子規(guī)則進一步為標識所述匹配規(guī)則,使用所述子規(guī)則所屬匹配規(guī)則的標識 和所述子規(guī)則在匹配規(guī)則中的順序號標識所述子規(guī)則。
4. 如權(quán)利要求3所述的匹配規(guī)則包含位移指示符的并行多模式匹配的系 統(tǒng),其特征在于,匹配規(guī)則的第一個子規(guī)則的順序號為1,所述節(jié)點處理模塊,還用于在終態(tài)節(jié)點處匹配的子規(guī)則為匹配規(guī)則的第 一個子規(guī)則時,將所述子規(guī)則對應的位移量記錄為0,并記錄所述所有子規(guī) 則的字符數(shù);所述匹配狀態(tài)表生成模塊,還用于將所述匹配狀態(tài)表中的最近匹配的子 規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置初始化為0; 所述匹配模塊進一步包括狀態(tài)轉(zhuǎn)移模塊,用于進行所述讀取搜索對象,按AC算法應用所述AC自 動機進行搜索的過程;處理模塊,用于査找所述節(jié)點規(guī)則表,獲得當前終態(tài)節(jié)點匹配的子規(guī)則 的標識、所述子規(guī)則對應的位移量和所述子規(guī)則的字符數(shù),按所述子規(guī)則標 識査找所述匹配狀態(tài)表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)、最近 匹配的子規(guī)則順序號和最近匹配的子規(guī)則的匹配位置,比較所述子規(guī)則順序 號和所述最近匹配的子規(guī)則順序號,所述子規(guī)則匹配位置和所述最近匹配的 子規(guī)則匹配位置,如果所述子規(guī)則順序號同所述最近匹配的子規(guī)則順序號的 差值等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)符合所述子規(guī)則對應的位移量,則根據(jù)所 述子規(guī)則順序號和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否是最后一個子規(guī)則, 如果是,則所述搜索對象同所述匹配規(guī)則匹配,如果不是,則更新匹配狀態(tài) 表中所述最近匹配子規(guī)則順序號為所述子規(guī)則的順序號,所述最近匹配子規(guī) 則的匹配位置為所述子規(guī)則的匹配位置。
5. —種匹配規(guī)則包含位移指示符的并行多模式匹配的方法,其特征在于, 包括步驟1,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含位移指示符 的匹配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,每個所述子規(guī)則 為確定規(guī)則,連接于所述位移指示符后的子規(guī)則對應的位移量為所述位移指 示符規(guī)定的位移量,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī) 則,并將所有子規(guī)則按照AC算法生成AC自動機;步驟2,讀取搜索對象,按AC算法應用所述AC自動機進行搜索,判斷 所述搜索對象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所 有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按所述子規(guī)則對應的位移 量匹配所述子規(guī)則,如果是,則所述搜索對象匹配所述匹配規(guī)則,并輸出匹 配結(jié)果。
6. 如權(quán)利要求5所述的匹配規(guī)則包含位移指示符的并行多模式匹配的方 法,其特征在于,所述步驟l進一步包括,步驟61,在確定所述匹配規(guī)則的子規(guī)則后,標識所述匹配規(guī)則的子規(guī)則; 步驟62,在生成所述AC自動機后,生成節(jié)點規(guī)則表,記錄在所述AC自動機中的終態(tài)節(jié)點處匹配的所有子規(guī)則標識和所述連接于位移指示符后的子規(guī)則對應的位移量,以供在搜索時進行查找;步驟63,生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一行對應于所述規(guī)則集中的一個匹配規(guī)則,每行記錄對應匹配規(guī)則包含的子規(guī)則總數(shù)、最近匹配的子規(guī)則的順序號和最近匹配的子規(guī)則的匹配位置,以供在搜索時進行査找。
7. 如權(quán)利要求6所述的匹配規(guī)則包含位移指示符的并行多模式匹配的方 法,其特征在于,所述步驟61進一步為標識所述匹配規(guī)則,使用所述子規(guī)則 所屬匹配規(guī)則的標識和所述子規(guī)則在匹配規(guī)則中的順序號標識所述子規(guī)則。
8. 如權(quán)利要求7所述的匹配規(guī)則包含位移指示符的并行多模式匹配的方 法,其特征在于,匹配規(guī)則的第一個子規(guī)則的順序號為1,所述步驟62,還包括在終態(tài)節(jié)點處匹配的子規(guī)則為匹配規(guī)則的第一個子 規(guī)則時,將所述子規(guī)則對應的位移量記錄為0,并記錄所述所有子規(guī)則的字 符數(shù);所述步驟63,還包括將所述匹配狀態(tài)表中的最近匹配的子規(guī)則的順序號 和最近匹配的子規(guī)則的匹配位置初始化為0; 所述步驟2進一步包括, 步驟81,査找所述節(jié)點規(guī)則表以獲得匹配的子規(guī)則標識、所述子規(guī)則對 應的位移量和所述子規(guī)則的字符數(shù),査找匹配狀態(tài)表,獲得所述子規(guī)則所屬 匹配規(guī)則的子規(guī)則總數(shù)、最近匹配的子規(guī)則順序號和最近匹配的子規(guī)則的匹 配位置;歩驟82,判斷所述子規(guī)則順序號同所述最近匹配的子規(guī)則順序號的差值 是否等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)是否符合所述子規(guī)則對應的位移量,如果 是,則執(zhí)行步驟83;步驟83,根據(jù)所述子規(guī)則順序號和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否 是最后一個子規(guī)則,如果是,則所述搜索對象同所述匹配規(guī)則匹配,如果不 是,則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號為所述子規(guī)則的順序號, 所述最近匹配子規(guī)則的匹配位置為所述子規(guī)則的匹配位置。
全文摘要
本發(fā)明涉及匹配規(guī)則包含位移指示符的并行多模式匹配的系統(tǒng)及方法,系統(tǒng)包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將規(guī)則集中包含位移指示符的匹配規(guī)則從位移指示符處分割成子規(guī)則,該子規(guī)則為確定規(guī)則,連接于位移指示符后的子規(guī)則對應的位移量為該位移指示符規(guī)定的位移量,為確定規(guī)則的匹配規(guī)則為其自身的子規(guī)則,將所有子規(guī)則按照AC算法生成AC自動機;匹配模塊,用于讀取搜索對象,進行搜索,判斷搜索對象是否按順序匹配所有子規(guī)則,并且對于連接于位移指示符后的子規(guī)則按該子規(guī)則對應的位移量匹配,如果是,則搜索對象匹配該匹配規(guī)則,并輸出匹配結(jié)果。從而,能夠應用AC算法對包含有位移指示符的匹配規(guī)則進行并行多模式匹配。
文檔編號G06K9/62GK101377816SQ20081011794
公開日2009年3月4日 申請日期2008年8月15日 優(yōu)先權(quán)日2008年8月15日
發(fā)明者葉潤國, 博 李, 胡振宇 申請人:北京啟明星辰信息技術(shù)股份有限公司;北京啟明星辰信息安全技術(shù)有限公司