專利名稱:一種并行多模式匹配的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于文本或網(wǎng)絡(luò)內(nèi)容處理技術(shù)領(lǐng)域,尤其涉及一種并行多模式匹配 方法及系統(tǒng)。
背景技術(shù):
多模式匹配 (Multiple Pattern String Matching)是計(jì)算機(jī)科學(xué)領(lǐng)域 中的基本問題之一,用于快速判斷某一數(shù)據(jù)塊中是否包含規(guī)則集中的某一或某 些規(guī)則。多模式匹配技術(shù)廣泛應(yīng)用于文本處理、網(wǎng)絡(luò)內(nèi)容分析、入侵檢測(cè)、生 物信息學(xué)、信息檢索等領(lǐng)域。
解決并行多模式匹配問題的經(jīng)典方法之一,是基于有限狀態(tài)自動(dòng)機(jī)的方 法。該方法最初由Alfred V. Aho和Margaret J. Corasick于1975年提出, 通常以發(fā)明者的名字簡稱為AC多模式匹配算法。AC算法的突出優(yōu)點(diǎn)在于其具 有相同的最壞和平均性能,可用于處理各種模式集合(例如不等長、大規(guī) 模),是一種高性能的多模式匹配方法。
圖1為AC算法一個(gè)具體實(shí)施例的AC自動(dòng)機(jī)。規(guī)則集為用于多模式匹配的 匹配規(guī)則的集合,該實(shí)施例中的規(guī)則集為{ she,he,hers,his },匹配規(guī)則為 she、 he、 hers和his。 AC自動(dòng)機(jī)用于進(jìn)行狀態(tài)轉(zhuǎn)移,圖1中的節(jié)點(diǎn)為表示狀 態(tài)的狀態(tài)節(jié)點(diǎn)。根據(jù)AC算法,規(guī)則集中每個(gè)匹配規(guī)則都可以由一條從初始狀 態(tài)節(jié)點(diǎn)0出發(fā)的路徑標(biāo)識(shí)出來,該路徑的終點(diǎn)為終態(tài)節(jié)點(diǎn)。在圖1中,匹配規(guī) 則she由初始狀態(tài)節(jié)點(diǎn)0到狀態(tài)節(jié)點(diǎn)5的路徑標(biāo)識(shí)出來,狀態(tài)節(jié)點(diǎn)5為終態(tài)節(jié) 點(diǎn);匹配規(guī)則he由初始狀態(tài)節(jié)點(diǎn)0到狀態(tài)節(jié)點(diǎn)2的路徑標(biāo)識(shí)出來,狀態(tài)節(jié)點(diǎn) 2為終態(tài)節(jié)點(diǎn);匹配規(guī)則hers由初始狀態(tài)節(jié)點(diǎn)0到狀態(tài)節(jié)點(diǎn)9的路徑標(biāo)識(shí)出 來,狀態(tài)節(jié)點(diǎn)9為終態(tài)節(jié)點(diǎn);匹配規(guī)則his由初始狀態(tài)節(jié)點(diǎn)0到狀態(tài)節(jié)點(diǎn)7 的路徑標(biāo)識(shí)出來,狀態(tài)節(jié)點(diǎn)7為終態(tài)節(jié)點(diǎn)。
對(duì)于各種確定性規(guī)則的模式匹配來說,AC算法(以及其變種)無疑是個(gè) 非常優(yōu)秀的算法,但卻無法處理含有通配符的非確定性規(guī)則的匹配。發(fā)明內(nèi)容為解決上述問題,本發(fā)明提供了一種并行多模式匹配的方法及系統(tǒng),應(yīng)用AC算法來處理含有通配符的非確定規(guī)則的并行多模式匹配。本發(fā)明公開了一種并行多模式匹配的系統(tǒng),包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配符 的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包含通 配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī),并輸出所述AC自動(dòng)機(jī);匹配模塊,用于讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出匹配結(jié)果。所述生成模塊進(jìn)一步包括規(guī)則讀取模塊,用于進(jìn)行所述讀取包含匹配規(guī)則的規(guī)則集的過程; 自動(dòng)機(jī)生成模塊,用于進(jìn)行所述將所述規(guī)則集中包含通配符的匹配規(guī)則從 通配符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中不包含通配符的匹配規(guī) 則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī)的過程; 輸出模塊,用于進(jìn)行所述輸出所述AC自動(dòng)機(jī)的過程。所述匹配模塊進(jìn)一步包括讀取模塊,用于進(jìn)行所述讀取搜索對(duì)象和所述AC自動(dòng)機(jī)的過程;搜索模塊,用于進(jìn)行所述按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索并判斷所 述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有 子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則的過程;匹配輸出模塊,用于進(jìn)行所述輸出匹配結(jié)果的過程。所述自動(dòng)機(jī)生成模塊進(jìn)一步包括規(guī)則解析模塊、匹配狀態(tài)表生成模塊、AC 狀態(tài)創(chuàng)建模塊和節(jié)點(diǎn)處理模塊,所述規(guī)則解析模塊,包括解析模塊和標(biāo)識(shí)模塊,所述解析模塊用于進(jìn)行所 述將所述規(guī)則集中包含通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的 子規(guī)則,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則的過程,所述標(biāo)識(shí)模塊用于標(biāo)識(shí)匹配規(guī)則,并使用所述子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和所 述子規(guī)則在匹配規(guī)則中的順序號(hào)標(biāo)識(shí)所述子規(guī)則;所述AC狀態(tài)創(chuàng)建模塊,用于進(jìn)行所述按照AC算法生成AC自動(dòng)機(jī)的過程; 所述節(jié)點(diǎn)處理模塊,用于生成節(jié)點(diǎn)規(guī)則表,以記錄在所述AC自動(dòng)機(jī)中的狀態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí),以供所述搜索模塊在搜索時(shí)進(jìn)行査找,并獲得當(dāng)前狀態(tài)節(jié)點(diǎn)處匹配的子規(guī)則標(biāo)識(shí);所述匹配狀態(tài)表生成模塊,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一 行對(duì)應(yīng)于所述規(guī)則集中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則 總數(shù)和最近匹配的子規(guī)則的順序號(hào),以供所述搜索模塊在獲得所述匹配的子規(guī) 則標(biāo)識(shí)后,依據(jù)所述匹配的子規(guī)則標(biāo)識(shí)進(jìn)行査找并更新所述匹配狀態(tài)表;所述輸出模塊,還用于輸出所述匹配狀態(tài)表。所述搜索模塊進(jìn)一步包括狀態(tài)轉(zhuǎn)移模塊和處理模塊,所述狀態(tài)轉(zhuǎn)移模塊,用于按AC算法應(yīng)用所述AC自動(dòng)機(jī)搜索所述搜索對(duì)象,進(jìn)行狀態(tài)轉(zhuǎn)移;所述處理模塊,用于查找所述節(jié)點(diǎn)規(guī)則表以獲得當(dāng)前狀態(tài)節(jié)點(diǎn)匹配的子規(guī) 則標(biāo)識(shí),按所述子規(guī)則標(biāo)識(shí)查找所述匹配狀態(tài)表,獲得所述子規(guī)則所屬匹配規(guī) 則的子規(guī)則總數(shù)和最近匹配的子規(guī)則順序號(hào),比較所述子規(guī)則順序號(hào)和所述最 近匹配的子規(guī)則順序號(hào),如果所述子規(guī)則順序號(hào)比所述最近匹配的子規(guī)則順序 號(hào)大于1,則根據(jù)所述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否是 最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不是, 則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào)。本發(fā)明還公開了一種并行多模式匹配的方法,包括歩驟l,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配符的匹配 規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包含通配符, 所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則 按照AC算法生成AC自動(dòng)機(jī),并輸出所述AC自動(dòng)機(jī);步驟2,讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng)機(jī) 進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述 匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出 匹配結(jié)果。所述步驟l進(jìn)一歩包括,歩驟71,標(biāo)識(shí)所述規(guī)則集的匹配規(guī)則,并在確定所述匹配規(guī)則的子規(guī)則 后,使用所述子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和所述子規(guī)則在匹配規(guī)則中的順序號(hào) 標(biāo)識(shí)所述子規(guī)則;步驟72,在生成所述AC自動(dòng)機(jī)后,生成節(jié)點(diǎn)規(guī)則表,記錄在所述AC自 動(dòng)機(jī)中的狀態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí),以供在搜索時(shí)進(jìn)行査找,并獲得 當(dāng)前狀態(tài)節(jié)點(diǎn)處匹配的子規(guī)則標(biāo)識(shí);歩驟73,生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一行對(duì)應(yīng)于所述規(guī)則集 中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則總數(shù)和最近匹配的子 規(guī)則的順序號(hào),以供在搜索時(shí)獲得所述匹配的子規(guī)則標(biāo)識(shí)后,依據(jù)所述匹配的 子規(guī)則標(biāo)識(shí)進(jìn)行査找并更新所述匹配狀態(tài)表;步驟74,輸出所述匹配狀態(tài)表。所述歩驟2進(jìn)一步包括,步驟81,按AC算法應(yīng)用所述AC自動(dòng)機(jī)搜索所述搜索對(duì)象,進(jìn)行狀態(tài)轉(zhuǎn)移;步驟82,查找所述節(jié)點(diǎn)規(guī)則表以獲得匹配的子規(guī)則標(biāo)識(shí),査找匹配狀態(tài) 表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)和最近匹配的子規(guī)則順序號(hào);步驟83,判斷所述子規(guī)則順序號(hào)是否比所述最近匹配的子規(guī)則順序號(hào)大 于l,如果大于l,則執(zhí)行步驟84;歩驟84,根據(jù)所述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否 是最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不是, 則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào)。本發(fā)明的有益效果在于,克服了 AC算法不能處理含有通配符的非確定性 規(guī)則的匹配問題,既保留了 AC算法的高效性,又可以匹配含有通配符的非確 定性規(guī)則。
圖1是AC算法的AC自動(dòng)機(jī)示意圖;圖2是本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖; 圖3是本發(fā)明的方法流程圖;圖4是本發(fā)明的生成模塊結(jié)構(gòu)示意圖;圖5是本發(fā)明的自動(dòng)機(jī)生成模塊結(jié)構(gòu)示意圖;圖6是本發(fā)明的匹配模塊結(jié)構(gòu)示意圖;圖7是本發(fā)明的搜索模塊結(jié)構(gòu)示意圖;圖8是本發(fā)明方法具體實(shí)施例的流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅 僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明系統(tǒng)2,包括生成模塊201和匹配模塊202組成,如圖2所示。生成模塊201,用于讀取包含通配符的匹配規(guī)則的規(guī)則集,將所述規(guī)則集 中包含通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī) 則中不包含通配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī) 則,將規(guī)則集中匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,從而使替換后的規(guī)則集 中不包含通配符,按照AC算法生成對(duì)應(yīng)于替換后的規(guī)則集的AC自動(dòng)機(jī),并輸 出所述AC自動(dòng)機(jī),對(duì)于不包含通配符的匹配規(guī)則,由于其子規(guī)則是其自身, 所以規(guī)則集中不包含通配符的匹配規(guī)則可以不做替換直接保留;匹配模塊202,用于讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述 AC自動(dòng)機(jī)進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順 序匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī) 則,并輸出匹配結(jié)果。本發(fā)明的方法如圖3所示,包括步驟S301,讀取包含通配符的匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含 通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不 包含通配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,將 規(guī)則集中匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,從而使替換后的規(guī)則集中不包 含通配符,按照AC算法生成對(duì)應(yīng)于替換后的規(guī)則集的AC自動(dòng)機(jī),并輸出所述 AC自動(dòng)機(jī),對(duì)于不包含通配符的匹配規(guī)則,由于其子規(guī)則是其自身,所以規(guī) 則集中不包含通配符的匹配規(guī)則可以不做替換直接保留。歩驟S302,讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng) 機(jī)進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所 述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸 出匹配結(jié)果。生成模塊201包括,規(guī)則讀取模塊401、自動(dòng)機(jī)生成模塊402和輸出模塊 403,如圖4所示。規(guī)則讀取模塊401,用以逐條讀去規(guī)則集中的匹配規(guī)則,并發(fā)送給自動(dòng)機(jī) 生成模塊402。如果匹配規(guī)則是保存在文件中,則進(jìn)一步用于在逐行讀取匹配 規(guī)則前打開文件。自動(dòng)機(jī)生成模塊402,用以判斷規(guī)則集中各個(gè)匹配規(guī)則是否包含通配符, 如果包含,則從通配符處將匹配規(guī)則分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī) 則中不包含通配符,如果不包含,則所述匹配規(guī)則作為其自身的子規(guī)則,將規(guī) 則集中匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,從而使替換后的規(guī)則集中不包含 通配符,按照AC算法生成匹配轉(zhuǎn)換后的規(guī)則集的AC自動(dòng)機(jī),并生成匹配狀態(tài) 表和節(jié)點(diǎn)規(guī)則表,匹配狀態(tài)表用以記錄匹配規(guī)則的匹配狀態(tài),節(jié)點(diǎn)規(guī)則集用以 記錄在所述AC自動(dòng)機(jī)的終態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則,并將AC自動(dòng)機(jī)和匹配 狀態(tài)表發(fā)送給輸出模塊403。輸出模塊403,用以輸出AC自動(dòng)機(jī)和匹配狀態(tài)表。自動(dòng)機(jī)生成模塊402包括,規(guī)則解析模塊501、匹配狀態(tài)表生成模塊502、 AC狀態(tài)創(chuàng)建模塊503和節(jié)點(diǎn)處理模塊504,如圖5所示。 規(guī)則解析模塊501,包括解析模塊510和標(biāo)識(shí)模塊511。 解析模塊510,用于逐條判斷規(guī)則集中的匹配規(guī)則是否包含通配符,如果 包含,則査找匹配規(guī)則中通配符的位置,在通配符位置處將匹配規(guī)則分割為不 包含通配符的子規(guī)則,如果不包含,則所述匹配規(guī)則作為其自身的子規(guī)則,將 規(guī)則集中的匹配規(guī)則用該匹配規(guī)則的子規(guī)則替換,使規(guī)則集轉(zhuǎn)換為不包含通配 符的規(guī)則集。標(biāo)識(shí)模塊511,用于標(biāo)識(shí)匹配規(guī)則,并使用子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和 子規(guī)則在所屬匹配規(guī)則中的順序號(hào)標(biāo)識(shí)子規(guī)則;例如, 一個(gè)匹配規(guī)則"334566*990000",標(biāo)識(shí)該匹配規(guī)則為23,該規(guī)則 包含一個(gè)通配符"*",被分割為兩個(gè)子規(guī)則"334566"和"990000",子規(guī)則的順序號(hào)分別是1和2。采用二維數(shù)組將兩個(gè)子規(guī)則分別標(biāo)識(shí)為(23,1)和(23,2)。又如, 一個(gè)不含通配符的匹配規(guī)則"323457789"標(biāo)識(shí)為24,則該 匹配規(guī)則的子規(guī)則標(biāo)識(shí)為(24, 1)。匹配狀態(tài)表生成模塊502,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一 行對(duì)應(yīng)于所述規(guī)則集中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則 總數(shù)和最近匹配的子規(guī)則的順序號(hào),以供所述搜索模塊602在獲得所述匹配的 子規(guī)則標(biāo)識(shí)后,依據(jù)所述匹配的子規(guī)則標(biāo)識(shí)進(jìn)行查找并更新所述匹配狀態(tài)表。例如,規(guī)則集中有N個(gè)匹配規(guī)則,建立一個(gè)NX2的二維表格,其中行號(hào) 表示匹配規(guī)則的標(biāo)識(shí),第1列表示該匹配規(guī)則包含的子規(guī)則總數(shù),第2列表示 最近匹配的子規(guī)則的順序號(hào),并且每個(gè)匹配規(guī)則的最近匹配的子規(guī)則的順序號(hào) 初始化為0。AC狀態(tài)創(chuàng)建模塊503,用于對(duì)應(yīng)于轉(zhuǎn)換后的規(guī)則集,按AC算法生成AC 自動(dòng)機(jī)。節(jié)點(diǎn)處理模塊504,用于生成節(jié)點(diǎn)規(guī)則表,記錄在所述AC自動(dòng)機(jī)中的終 態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則,搜索模塊602在搜索時(shí)進(jìn)行杳找,并獲得當(dāng)前終 態(tài)節(jié)點(diǎn)處匹配的子規(guī)則標(biāo)識(shí)。
具體實(shí)施方式
為,對(duì)應(yīng)于每個(gè)終態(tài)節(jié)點(diǎn)建立一個(gè)鏈表,鏈表中存有該終態(tài) 節(jié)點(diǎn)對(duì)應(yīng)的子規(guī)則標(biāo)識(shí)。其中的子規(guī)則標(biāo)識(shí)為所述的二維數(shù)組,例如(23, 2), 表示第23條匹配規(guī)則的第2個(gè)子規(guī)則以該狀態(tài)節(jié)點(diǎn)為終態(tài)節(jié)點(diǎn)。匹配模塊202包括,讀取模塊601、搜索模塊602和匹配輸出模塊603, 如圖6所示。讀取模塊601,用于讀取搜索對(duì)象、AC自動(dòng)機(jī)和匹配狀態(tài)表,并將其發(fā)送 給搜索模塊602。搜索模塊602,用于按AC算法應(yīng)用AC自動(dòng)機(jī)對(duì)搜索對(duì)象進(jìn)行搜索,判斷 搜索對(duì)象是否按子規(guī)則在匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則, 如果是,則匹配所述匹配規(guī)則。匹配輸出模塊603,用于輸出匹配結(jié)果,例如輸出匹配成功的匹配規(guī)則的 標(biāo)識(shí)。搜索模塊602包括,狀態(tài)轉(zhuǎn)移模塊701和處理模塊702,如圖7所示。 狀態(tài)轉(zhuǎn)移模塊701,用于應(yīng)用AC自動(dòng)機(jī),根據(jù)讀取的搜索對(duì)象的字符,按AC算法進(jìn)行狀態(tài)轉(zhuǎn)移。
具體實(shí)施方式
為,用- -個(gè)整數(shù)S表示AC自動(dòng)機(jī)的當(dāng)
前狀態(tài),初始時(shí)S為初始狀態(tài)O,每讀取一個(gè)搜索對(duì)象的字符,就在AC自動(dòng)
機(jī)中査找,確定下一狀態(tài),并修改s值為該狀態(tài)。
處理模塊702,用于在當(dāng)前狀態(tài)節(jié)點(diǎn)為終態(tài)節(jié)點(diǎn)時(shí),査找所述節(jié)點(diǎn)規(guī)則表 以獲得當(dāng)前終態(tài)節(jié)點(diǎn)匹配的子規(guī)則標(biāo)識(shí),按所述子規(guī)則標(biāo)識(shí)查找所述匹配狀態(tài) 表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)和最近匹配的子規(guī)則順序號(hào), 比較所述子規(guī)則順序號(hào)和所述最近匹配的子規(guī)則順序號(hào),如果所述子規(guī)則順序 號(hào)比所述最近匹配的子規(guī)則順序號(hào)大于1,則根據(jù)所述子規(guī)則順序號(hào)和所述子 規(guī)則總數(shù)判斷所述子規(guī)則是否是最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同 所述匹配規(guī)則匹配,如果不是,則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序 號(hào)為所述子規(guī)則的順序號(hào)。
具體實(shí)施方式
如下。
在當(dāng)前終態(tài)節(jié)點(diǎn)的鏈表中逐一査找每個(gè)子規(guī)則,對(duì)于每個(gè)子規(guī)則,根據(jù)其 標(biāo)識(shí)確定其所屬的匹配規(guī)則,在匹配狀態(tài)表中査找該匹配規(guī)則的子規(guī)則總數(shù)和 最近匹配的子規(guī)則;
判斷鏈表中查找的子規(guī)則的順序號(hào)是否比匹配狀態(tài)表中最近匹配子規(guī)則 的順序號(hào)大l,如果是,則根據(jù)子規(guī)則總數(shù)判斷該子規(guī)則是否是最后一個(gè)子規(guī) 則,如果是最后一個(gè)子規(guī)則,則搜索對(duì)象匹配該子規(guī)則所屬的匹配規(guī)則,輸出 該匹配規(guī)則;如果不是最后一個(gè)子規(guī)則,并且鏈表中査找的子規(guī)則的順序號(hào)比 匹配狀態(tài)表中最近匹配子規(guī)則的順序號(hào)大1,則更新匹配狀態(tài)表中記錄的最近 匹配子規(guī)則為該子規(guī)則的順序號(hào)。
將該終態(tài)節(jié)點(diǎn)對(duì)應(yīng)的所有子規(guī)則按上述方法處理完后,讀取下一個(gè)字符, 按AC算法搜索。
本發(fā)明的方法的具體實(shí)施例如圖8所示。
步驟S801,讀取規(guī)則集。
步驟S802,標(biāo)識(shí)所述規(guī)則集的匹配規(guī)則,判斷規(guī)則集的匹配規(guī)則中是否 包含通配符,如果包含,在通配符處將匹配規(guī)則劃分為不包含通配符的子規(guī)則, 如果不包含,則所述匹配規(guī)則作為其自身的子規(guī)則,然后將所有子規(guī)則按AC 算法生成AC自動(dòng)機(jī),并生成節(jié)點(diǎn)規(guī)則表和匹配狀態(tài)表。
節(jié)點(diǎn)規(guī)則表,記錄在所述AC自動(dòng)機(jī)中的終態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則,子規(guī)則用其所屬匹配規(guī)則的標(biāo)識(shí)和該子規(guī)則在匹配規(guī)則中的順序號(hào)標(biāo)識(shí)。
匹配狀態(tài)表中的每一行對(duì)應(yīng)于- -個(gè)匹配規(guī)則,記錄該匹配規(guī)則的最近匹配
的子規(guī)則的順序號(hào)和子規(guī)則總數(shù),每個(gè)匹配規(guī)則的最近匹配的子規(guī)則的順序號(hào)
初始化為0。
步驟S803,讀取搜索對(duì)象。
步驟S804,按AC算法轉(zhuǎn)移狀態(tài)。
步驟S805,判斷狀態(tài)節(jié)點(diǎn)是否為終態(tài)節(jié)點(diǎn),如果是,執(zhí)行步驟S806,否 則,執(zhí)行步驟S803。
步驟S806,査找節(jié)點(diǎn)規(guī)則表,獲得該終態(tài)節(jié)點(diǎn)匹配的子規(guī)則的標(biāo)識(shí)。
步驟S807,按子規(guī)則標(biāo)識(shí)中的所屬匹配規(guī)則的標(biāo)識(shí)査找匹配狀態(tài)表,判 斷該子規(guī)則的順序號(hào)是否比所屬匹配規(guī)則對(duì)應(yīng)的最近匹配子規(guī)則大1,如果 是,執(zhí)行步驟S808,否則執(zhí)行歩驟S810。
步驟S808,同所屬匹配規(guī)則的子規(guī)則總數(shù)比較,判斷該子規(guī)則是否是最 后一個(gè)子規(guī)則,如果是,輸出匹配結(jié)果,執(zhí)行歩驟S810,否則,執(zhí)行步驟S809。
歩驟S809,更新匹配狀態(tài)表中匹配規(guī)則對(duì)應(yīng)的最近匹配的子規(guī)則為該子 規(guī)則的順序號(hào)。
步驟S810,判斷該終態(tài)節(jié)點(diǎn)處是否還有匹配的子規(guī)則,如果有,執(zhí)行步 驟S806,否則,執(zhí)行步驟S803。
執(zhí)行上述流程,直到搜索對(duì)象被讀取完為止。
權(quán)利要求
1.一種并行多模式匹配的系統(tǒng),其特征在于,包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包含通配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī),并輸出所述AC自動(dòng)機(jī);匹配模塊,用于讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出匹配結(jié)果。
2. 如權(quán)利要求1所述的并行多模式匹配的系統(tǒng),其特征在于,所述生成模塊進(jìn)一步包括規(guī)則讀取模塊,用于進(jìn)行所述讀取包含匹配規(guī)則的規(guī)則集的過程; 自動(dòng)機(jī)生成模塊,用于進(jìn)行所述將所述規(guī)則集中包含通配符的匹配規(guī)則從 通配符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中不包含通配符的匹配規(guī) 則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī)的過程; 輸出模塊,用于進(jìn)行所述輸出所述AC自動(dòng)機(jī)的過程。
3. 如權(quán)利要求2所述的并行多模式匹配的系統(tǒng),其特征在于,所述匹配模 塊進(jìn)一步包括-讀取模塊,用于進(jìn)行所述讀取搜索對(duì)象和所述AC自動(dòng)機(jī)的過程; 搜索模塊,用于進(jìn)行所述按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索并判斷所 述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有 子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則的過程; 匹配輸出模塊,用于進(jìn)行所述輸出匹配結(jié)果的過程。
4. 如權(quán)利要求3所述的并行多模式匹配的系統(tǒng),其特征在于,所述自動(dòng)機(jī) 生成模塊進(jìn)一步包括規(guī)則解析模塊、匹配狀態(tài)表生成模塊、AC狀態(tài)創(chuàng)建模塊 和節(jié)點(diǎn)處理模塊,所述規(guī)則解析模塊,包括解析模塊和標(biāo)識(shí)模塊,所述解析模塊用于進(jìn)行所 述將所述規(guī)則集中包含通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則的過程, 所述標(biāo)識(shí)模塊用于標(biāo)識(shí)匹配規(guī)則,并使用所述子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和所 述子規(guī)則在匹配規(guī)則中的順序號(hào)標(biāo)識(shí)所述子規(guī)則;所述AC狀態(tài)創(chuàng)建模塊,用于進(jìn)行所述按照AC算法生成AC自動(dòng)機(jī)的過程;所述節(jié)點(diǎn)處理模塊,用于生成節(jié)點(diǎn)規(guī)則表,以記錄在所述AC自動(dòng)機(jī)中的狀態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí),以供所述搜索模塊在搜索時(shí)進(jìn)行査找,并獲得當(dāng)前狀態(tài)節(jié)點(diǎn)處匹配的子規(guī)則標(biāo)識(shí);所述匹配狀態(tài)表生成模塊,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一 行對(duì)應(yīng)于所述規(guī)則集中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則 總數(shù)和最近匹配的子規(guī)則的順序號(hào),以供所述搜索模塊在獲得所述匹配的子規(guī) 則標(biāo)識(shí)后,依據(jù)所述匹配的子規(guī)則標(biāo)識(shí)進(jìn)行查找并更新所述匹配狀態(tài)表;所述輸出模塊,還用于輸出所述匹配狀態(tài)表。
5. 如權(quán)利要求4所述的并行多模式匹配的系統(tǒng),其特征在于,所述搜索模塊進(jìn)一步包括狀態(tài)轉(zhuǎn)移模塊和處理模塊,所述狀態(tài)轉(zhuǎn)移模塊,用于按AC算法應(yīng)用所述AC自動(dòng)機(jī)搜索所述搜索對(duì)象, 進(jìn)行狀態(tài)轉(zhuǎn)移;所述處理模塊,用于查找所述節(jié)點(diǎn)規(guī)則表以獲得當(dāng)前狀態(tài)節(jié)點(diǎn)匹配的子規(guī) 則標(biāo)識(shí),按所述子規(guī)則標(biāo)識(shí)査找所述匹配狀態(tài)表,獲得所述子規(guī)則所屬匹配規(guī) 則的子規(guī)則總數(shù)和最近匹配的子規(guī)則順序號(hào),比較所述子規(guī)則順序號(hào)和所述最 近匹配的子規(guī)則順序號(hào),如果所述子規(guī)則順序號(hào)比所述最近匹配的子規(guī)則順序 號(hào)大于1,則根據(jù)所述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否是 最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不是, 則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào)。
6. —種并行多模式匹配的方法,其特征在于,包括步驟l,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配符的匹配 規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包含通配符, 所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則 按照AC算法生成AC自動(dòng)機(jī),并輸出所述AC自動(dòng)機(jī);步驟2,讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng)機(jī) 進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出 匹配結(jié)果。
7. 如權(quán)利要求6所述的并行多模式匹配的方法,其特征在于,所述步驟l 進(jìn)一步包括,歩驟71,標(biāo)識(shí)所述規(guī)則集的匹配規(guī)則,并在確定所述匹配規(guī)則的子規(guī)則 后,使用所述子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和所述子規(guī)則在匹配規(guī)則中的順序號(hào) 標(biāo)識(shí)所述子規(guī)則;步驟72,在生成所述AC自動(dòng)機(jī)后,生成節(jié)點(diǎn)規(guī)則表,記錄在所述AC自 動(dòng)機(jī)中的狀態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí),以供在搜索時(shí)進(jìn)行查找,并獲得 當(dāng)前狀態(tài)節(jié)點(diǎn)處匹配的子規(guī)則標(biāo)識(shí);步驟73,生成匹配狀態(tài)表,所述匹配狀態(tài)表中的一行對(duì)應(yīng)于所述規(guī)則集 中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則總數(shù)和最近匹配的子 規(guī)則的順序號(hào),以供在搜索時(shí)獲得所述匹配的子規(guī)則標(biāo)識(shí)后,依據(jù)所述匹配的 子規(guī)則標(biāo)識(shí)進(jìn)行查找并更新所述匹配狀態(tài)表;歩驟74,輸出所述匹配狀態(tài)表。
8. 如權(quán)利要求7所述的并行多模式匹配的方法,其特征在于,所述步驟2 進(jìn)一步包括,步驟81,按AC算法應(yīng)用所述AC自動(dòng)機(jī)搜索所述搜索對(duì)象,進(jìn)行狀態(tài)轉(zhuǎn)移;步驟82,查找所述節(jié)點(diǎn)規(guī)則表以獲得匹配的子規(guī)則標(biāo)識(shí),査找匹配狀態(tài) 表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)和最近匹配的子規(guī)則順序號(hào);步驟83,判斷所述子規(guī)則順序號(hào)是否比所述最近匹配的子規(guī)則順序號(hào)大 于l,如果大于l,則執(zhí)行步驟84;步驟84,根據(jù)所述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否 是最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不是, 則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào)。
全文摘要
本發(fā)明涉及一種并行多模式匹配的方法和系統(tǒng),所述系統(tǒng)包括生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含通配符的匹配規(guī)則從通配符處分割成所述匹配規(guī)則的子規(guī)則,所述子規(guī)則中不包含通配符,所述規(guī)則集中不包含通配符的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī),并輸出所述AC自動(dòng)機(jī);匹配模塊,用于讀取搜索對(duì)象和所述AC自動(dòng)機(jī),按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索,判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所有子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出匹配結(jié)果。從而既保留AC算法的高效性,又可以匹配含有通配符的非確定性規(guī)則。
文檔編號(hào)H04L9/28GK101286988SQ20081010441
公開日2008年10月15日 申請(qǐng)日期2008年4月18日 優(yōu)先權(quán)日2008年4月18日
發(fā)明者葉潤國, 博 李, 洋 王, 胡振宇, 許金鵬 申請(qǐng)人:北京啟明星辰信息技術(shù)股份有限公司