国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      匹配規(guī)則包含位移指示符的并行多模式匹配的方法及系統(tǒng)的制作方法

      文檔序號(hào):6464675閱讀:206來源:國知局
      專利名稱:匹配規(guī)則包含位移指示符的并行多模式匹配的方法及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明屬于文本或網(wǎng)絡(luò)內(nèi)容處理技術(shù)領(lǐng)域,尤其涉及一種匹配規(guī)則包含 位移指示符的并行多模式匹配的方法及系統(tǒng)。
      背景技術(shù)
      多模式匹配 (Multiple Pattern String Matching)是計(jì)算機(jī)科學(xué)領(lǐng)域 中的基本問題之一,用于快速判斷某一數(shù)據(jù)塊中是否包含規(guī)則集中的某一或 某些規(guī)則。多模式匹配技術(shù)廣泛應(yīng)用于文本處理、網(wǎng)絡(luò)內(nèi)容分析、入侵檢測、 生物信息學(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ī)模),是一種高性能的多模式匹配方法。
      對(duì)于各種確定性規(guī)則的模式匹配來說,AC算法(以及其變種)無疑是個(gè) 非常優(yōu)秀的算法,但卻無法處理含有通配符的非確定性規(guī)則的匹配。
      中國專利申請200810104416. 2 "—種并行多模式匹配的方法及系統(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é)果。
      在具體的搜索過程中,當(dāng)用AC算法成功匹配一個(gè)子規(guī)則后,按子規(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)為當(dāng)前匹配子規(guī)
      上述發(fā)明將每個(gè)含有通配符的規(guī)則分解成多個(gè)子規(guī)則,并逐個(gè)檢査各個(gè)
      子規(guī)則是否按順序匹配成功。該方法解決了用AC算法來處理含有通配符的非 確定規(guī)則,例如"334566*990000",的并行多模式匹配問題,但該方法僅能 用來處理兩個(gè)子模式之間的字符是任意的、長度也是任意的這種形式。如果 要更加精確指明兩個(gè)子模式之間的位移,如"334566{2, 10}990000"(其中的 位移指示符{2, 10}表示,在子模式"334566"和"990000"之間的位移量是 2至10個(gè)字符),則上述發(fā)明則無法處理。

      發(fā)明內(nèi)容
      為解決上述問題,本發(fā)明提供了一種匹配規(guī)則包含位移指示符的并行多 模式匹配的方法及系統(tǒng),從而能夠應(yīng)用AC算法對(duì)包含有位移指示符的匹配規(guī) 則進(jìn)行匹配。
      本發(fā)明公開了一種匹配規(guī)則包含位移指示符的并行多模式匹配的系統(tǒng),
      包括
      生成模塊,用于讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含位移 指示符的匹配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,每個(gè)所述 子規(guī)則為確定規(guī)則,連接于所述位移指示符后的子規(guī)則對(duì)應(yīng)的位移量為所述 位移指示符規(guī)定的位移量,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身
      的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī);
      匹配模塊,用于讀取搜索對(duì)象,按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索,
      判斷所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則 的所有子規(guī)則,并且對(duì)于連接于位移指示符后的子規(guī)則按所述子規(guī)則對(duì)應(yīng)的 位移量匹配所述子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸 出匹配結(jié)果。
      所述生成模塊進(jìn)一步包括規(guī)則解析模塊、匹配狀態(tài)表生成模塊和節(jié)點(diǎn)處 理模塊,
      所述規(guī)則解析模塊,用于進(jìn)行所述將所述規(guī)則集中包含位移指示符的匹 配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,所述規(guī)則集中為確定
      規(guī)則的匹配規(guī)則作為其自身的子規(guī)則,并將所有子規(guī)則按照AC算法生成AC
      自動(dòng)機(jī)的過程,并在確定所述匹配規(guī)則的子規(guī)則后,標(biāo)識(shí)所述匹配規(guī)則的子
      規(guī)則;
      所述節(jié)點(diǎn)處理模塊,用于生成節(jié)點(diǎn)規(guī)則表,所述節(jié)點(diǎn)規(guī)則表記錄在所述 AC自動(dòng)機(jī)中的終態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí)和所述連接于位移指示符 后的子規(guī)則對(duì)應(yīng)的位移量,以供所述匹配模塊在搜索時(shí)進(jìn)行査找;
      所述匹配狀態(tài)表生成模塊,用于生成匹配狀態(tài)表,所述匹配狀態(tài)表中的 一行對(duì)應(yīng)于所述規(guī)則集中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子 規(guī)則總數(shù)、最近匹配的子規(guī)則的順序號(hào)和最近匹配的子規(guī)則的匹配位置,以 供所述匹配模塊在搜索時(shí)進(jìn)行査找。
      所述在確定所述匹配規(guī)則的子規(guī)則后,標(biāo)識(shí)所述匹配規(guī)則的子規(guī)則進(jìn)一 步為標(biāo)識(shí)所述匹配規(guī)則,使用所述子規(guī)則所屬匹配規(guī)則的標(biāo)識(shí)和所述子規(guī)則 在匹配規(guī)則中的順序號(hào)標(biāo)識(shí)所述子規(guī)則。
      匹配規(guī)則的第一個(gè)子規(guī)則的順序號(hào)為1,
      所述節(jié)點(diǎn)處理模塊,還用于在終態(tài)節(jié)點(diǎn)處匹配的子規(guī)則為匹配規(guī)則的第 一個(gè)子規(guī)則時(shí),將所述子規(guī)則對(duì)應(yīng)的位移量記錄為0,并記錄所述所有子規(guī) 則的字符數(shù);
      所述匹配狀態(tài)表生成模塊,還用于將所述匹配狀態(tài)表中的最近匹配的子 規(guī)則的順序號(hào)和最近匹配的子規(guī)則的匹配位置初始化為0; 所述匹配模塊進(jìn)一步包括
      狀態(tài)轉(zhuǎn)移模塊,用于進(jìn)行所述讀取搜索對(duì)象,按AC算法應(yīng)用所述AC自
      動(dòng)機(jī)進(jìn)行搜索的過程;
      處理模塊,用于査找所述節(jié)點(diǎn)規(guī)則表,獲得當(dāng)前終態(tài)節(jié)點(diǎn)匹配的子規(guī)則 的標(biāo)識(shí)、所述子規(guī)則對(duì)應(yīng)的位移量和所述子規(guī)則的字符數(shù),按所述子規(guī)則標(biāo) 識(shí)査找所述匹配狀態(tài)表,獲得所述子規(guī)則所屬匹配規(guī)則的子規(guī)則總數(shù)、最近 匹配的子規(guī)則順序號(hào)和最近匹配的子規(guī)則的匹配位置,比較所述子規(guī)則順序 號(hào)和所述最近匹配的子規(guī)則順序號(hào),所述子規(guī)則匹配位置和所述最近匹配的 子規(guī)則匹配位置,如果所述子規(guī)則順序號(hào)同所述最近匹配的子規(guī)則順序號(hào)的 差值等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)符合所述子規(guī)則對(duì)應(yīng)的位移量,則根據(jù)所 述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否是最后一個(gè)子規(guī)則, 如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不是,則更新匹配狀態(tài) 表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào),所述最近匹配子規(guī) 則的匹配位置為所述子規(guī)則的匹配位置。
      本發(fā)明還公開了一種匹配規(guī)則包含位移指示符的并行多模式匹配的方 法,包括
      步驟1,讀取包含匹配規(guī)則的規(guī)則集,將所述規(guī)則集中包含位移指示符 的匹配規(guī)則從位移指示符處分割成所述匹配規(guī)則的子規(guī)則,每個(gè)所述子規(guī)則 為確定規(guī)則,連接于所述位移指示符后的子規(guī)則對(duì)應(yīng)的位移量為所述位移指 示符規(guī)定的位移量,所述規(guī)則集中為確定規(guī)則的匹配規(guī)則作為其自身的子規(guī) 則,并將所有子規(guī)則按照AC算法生成AC自動(dòng)機(jī);
      步驟2,讀取搜索對(duì)象,按AC算法應(yīng)用所述AC自動(dòng)機(jī)進(jìn)行搜索,判斷 所述搜索對(duì)象是否按子規(guī)則在所述匹配規(guī)則中的順序匹配所述匹配規(guī)則的所 有子規(guī)則,并且對(duì)于連接于位移指示符后的子規(guī)則按所述子規(guī)則對(duì)應(yīng)的位移 量匹配所述子規(guī)則,如果是,則所述搜索對(duì)象匹配所述匹配規(guī)則,并輸出匹 配結(jié)果。
      所述步驟1進(jìn)一步包括,
      步驟61,在確定所述匹配規(guī)則的子規(guī)則后,標(biāo)識(shí)所述匹配規(guī)則的子規(guī)則;
      步驟62,在生成所述AC自動(dòng)機(jī)后,生成節(jié)點(diǎn)規(guī)則表,記錄在所述AC自 動(dòng)機(jī)中的終態(tài)節(jié)點(diǎn)處匹配的所有子規(guī)則標(biāo)識(shí)和所述連接于位移指示符后的子
      規(guī)則對(duì)應(yīng)的位移量,以供在搜索時(shí)進(jìn)行査找;
      步驟63, ^fe成匹配狀態(tài)表,所述匹配狀態(tài)表中的一行對(duì)應(yīng)于所述規(guī)則集 中的一個(gè)匹配規(guī)則,每行記錄對(duì)應(yīng)匹配規(guī)則包含的子規(guī)則總數(shù)、最近匹配的 子規(guī)則的順序號(hào)和最近匹配的子規(guī)則的匹配位置,以供在搜索時(shí)進(jìn)行查找。
      所述步驟61進(jìn)一步為標(biāo)識(shí)所述匹配規(guī)則,使用所述子規(guī)則所屬匹配規(guī)則 的標(biāo)識(shí)和所述子規(guī)則在匹配規(guī)則中的順序號(hào)標(biāo)識(shí)所述子規(guī)則。
      匹配規(guī)則的第一個(gè)子規(guī)則的順序號(hào)為1,
      所述步驟62,還包括在終態(tài)節(jié)點(diǎn)處匹配的子規(guī)則為匹配規(guī)則的第一個(gè)子 規(guī)則時(shí),將所述子規(guī)則對(duì)應(yīng)的位移量記錄為0,并記錄所述所有子規(guī)則的字 符數(shù);
      所述步驟63,還包括將所述匹配狀態(tài)表中的最近匹配的子規(guī)則的順序號(hào) 和最近匹配的子規(guī)則的匹配位置初始化為0; 所述步驟2進(jìn)一步包括,
      步驟81,査找所述節(jié)點(diǎn)規(guī)則表以獲得匹配的子規(guī)則標(biāo)識(shí)、所述子規(guī)則對(duì) 應(yīng)的位移量和所述子規(guī)則的字符數(shù),査找匹配狀態(tài)表,獲得所述子規(guī)則所屬 匹配規(guī)則的子規(guī)則總數(shù)、最近匹配的子規(guī)則順序號(hào)和最近匹配的子規(guī)則的匹 配位置;
      歩驟82,判斷所述子規(guī)則順序號(hào)同所述最近匹配的子規(guī)則順序號(hào)的差值 是否等于1,并且所述子規(guī)則的匹配位置同所述最近匹配的子規(guī)則的匹配位 置的差值減去所述子規(guī)則的字符數(shù)是否符合所述子規(guī)則對(duì)應(yīng)的位移量,如果 是,則執(zhí)行步驟83;
      步驟83,根據(jù)所述子規(guī)則順序號(hào)和所述子規(guī)則總數(shù)判斷所述子規(guī)則是否 是最后一個(gè)子規(guī)則,如果是,則所述搜索對(duì)象同所述匹配規(guī)則匹配,如果不 是,則更新匹配狀態(tài)表中所述最近匹配子規(guī)則順序號(hào)為所述子規(guī)則的順序號(hào), 所述最近匹配子規(guī)則的匹配位置為所述子規(guī)則的匹配位置。
      本發(fā)明的有益效果在于,通過將含有位移指示符的匹配規(guī)則在位移指示 符處分割成子規(guī)則,使得AC算法可以用于包含位移指示符的匹配規(guī)則,進(jìn)而 實(shí)現(xiàn)對(duì)含有位移指示符的匹配規(guī)則的并行多模式匹配。


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