字符串匹配方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及字符串匹配方法和裝置。
【背景技術(shù)】
[0002] 為了應對網(wǎng)絡(luò)入侵,需要對端口接收到的字符串進行監(jiān)控,即需要對接收到的字 符串按照特定的模式字符串進行分段匹配,為了使得字符串匹配更加高效,現(xiàn)有技術(shù)往往 在異構(gòu)計算環(huán)境中使用沒有回溯跳轉(zhuǎn)的多模式字符串匹配算法進行字符串匹配,即首先由 CHJ建立狀態(tài)自動機,該自動機不包括字符匹配失敗后的跳轉(zhuǎn),并將該自動機發(fā)送到圖形處 理器的全局內(nèi)存中,以便圖形處理器上的線程利用該自動機對接收到的待匹配字符串進行 匹配,由于采用了異構(gòu)計算環(huán)境,則圖形處理器上的多個線程同時對同一字符串的不同分 段進行匹配,為了防止漏匹配,每個分段之間都有重疊區(qū)域,該重疊區(qū)域的長度為模式字符 串長度的最大值。
[0003] 上述沒有回溯跳轉(zhuǎn)的多模式字符串匹配算法是將接收到的長度為η的待匹配字 符串分為η段,對于任意一個分段i (1 < i < η),該分段從待匹配字符串的第i個字符開始, 到第η個字符結(jié)束,當在字符串匹配的過程中遇到匹配失敗的情況時,該匹配過程結(jié)束,即 在利用上述狀態(tài)自動機進行字符串匹配的時候不進行狀態(tài)回溯,當較少的模式字符串之間 的相似度較低的情況下,可能每個線程檢測到一個或幾個字符時即可以判斷匹配失敗,避 免了圖形處理器對重疊區(qū)域進行檢測時浪費的系統(tǒng)資源。
[0004] 在利用現(xiàn)有力學模型試驗裝置進行試驗的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在 如下問題:
[0005] 當模式字符串的數(shù)量較多的時候,每個模式字符串中相似段出現(xiàn)的概率更高,每 個線程需要檢測更多的字符才可能判斷為匹配失敗,導致每個線程的執(zhí)行時間會大幅增 加,從而導致在較多模式字符串的情況下,字符串匹配的效率低。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的實施例提供一種字符串匹配方法和裝置,通過將模式字符串進行分段匹 配,能夠使得字符串匹配更加高效。
[0007] 本發(fā)明實施例的第一方面是提供字符串匹配方法,該方法包括:
[0008] 獲取前綴狀態(tài)自動機,所述前綴狀態(tài)自動機是由模式字符串的前綴按照多模式字 符串匹配算法構(gòu)成的狀態(tài)自動機,所述模式字符串為字符串匹配時所用的特征字符串,所 述前綴由從所述模式字符串第一個字符開始逐個提取預設(shè)值個數(shù)的字符組合而成;
[0009] 獲取待匹配字符串,根據(jù)所述前綴狀態(tài)自動機對所述待匹配字符串進行字符串匹 配,以便所述字符串匹配成功后中央處理器利用所述模式字符串的后綴對所述待匹配字符 串進行第二次字符串匹配。
[0010] 結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,所述獲取狀態(tài)自動機包括:
[0011] 從存儲器中獲取所述前綴狀態(tài)自動機,所述前綴狀態(tài)自動機按照稀疏矩陣的方式 存儲在所述存儲器內(nèi)存中,所述稀疏矩陣中的行表示所述前綴狀態(tài)自動機的各個狀態(tài),所 述稀疏矩陣每一列對應一個輸入,所述稀疏矩陣中的列表示所述前綴狀態(tài)自動機接收到每 一列對應的輸入時狀態(tài)跳轉(zhuǎn)的下一跳狀態(tài),其中-1表示在該行所示的狀態(tài)下有字符串被 成功匹配;
[0012] 在所述存儲器中存儲有匹配列表,所述匹配列表包括所述前綴狀態(tài)自動機的每一 個狀態(tài)以及與每一個狀態(tài)對應的地址,若其中第一狀態(tài)對應的地址不為空,則表示在該第 一狀態(tài)下有所述模式字符串的前綴被成功匹配,該第一狀態(tài)對應的地址為被成功匹配到的 所述模式字符串的前綴的存儲地址。
[0013] 結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,所述根據(jù)所述前綴狀態(tài)自動機對所 述待匹配字符串進行字符串匹配包括:
[0014] 獲取所述待匹配字符串,從所述待匹配字符串的首個字符開始,由至少一個線程 將所述待匹配字符串中的每個字符輸入到所述前綴狀態(tài)自動機中,當所使用的線程數(shù)量大 于1時,每兩個線程輸入的所述待匹配字符串中相同位置的字符數(shù)量等于所述預設(shè)值;
[0015] 當所述待匹配字符串中的每一個字符都在所述前綴狀態(tài)自動機中完成匹配過程, 則生成匹配結(jié)果,并將所述匹配結(jié)果存儲在存儲器中。
[0016] 第二方面,提供一種字符串匹配方法,該方法包括:
[0017] 獲取后綴狀態(tài)自動機,所述后綴狀態(tài)自動機是由模式字符串的后綴按照多模式字 符串匹配算法構(gòu)成的狀態(tài)自動機,且所述后綴狀態(tài)自動機不包括狀態(tài)回溯,所述模式字符 串為字符串匹配時所用的特征字符串,所述后綴的長度為所述模式字符串的長度與預設(shè)值 的差值;
[0018] 在圖形處理器對所述待匹配字符串進行字符串匹配成功后,獲取待匹配字符串, 根據(jù)所述后綴狀態(tài)自動機對所述待匹配字符串進行字符串匹配。
[0019] 結(jié)合第二方面,在第一種可能的實現(xiàn)方式中,所述方法還包括:
[0020] 將所述模式字符串拆分為前綴和后綴,所述前綴由從所述模式字符串第一個字符 開始逐個提取所述預設(shè)值個數(shù)的字符組合而成,所述后綴為所述模式字符串減去所述前綴 后剩下的部分;
[0021] 將所述前綴按照多模式字符串匹配算法生成前綴狀態(tài)自動機并存儲于存儲器中, 將所述后綴按照多模式字符串匹配算法生成后綴狀態(tài)自動機,并去除所述后綴狀態(tài)自動機 中的狀態(tài)回溯。
[0022] 結(jié)合第二方面,在第二種可能的實現(xiàn)方式中,所述前綴狀態(tài)自動機與所述后綴狀 態(tài)自動機按照稀疏矩陣的方式存儲在所述存儲器中,所述稀疏矩陣中的行表示所述后綴狀 態(tài)自動機的各個狀態(tài),所述稀疏矩陣每一列對應一個輸入,所述稀疏矩陣中的列表示所述 后綴狀態(tài)自動機接收到每一列對應的輸入時狀態(tài)跳轉(zhuǎn)的下一跳狀態(tài),其中-1表示在該行 所示的狀態(tài)下有字符串被成功匹配;
[0023] 在所述存儲器中存儲有匹配列表,所述匹配列表包括所述后綴狀態(tài)自動機的每一 個狀態(tài)以及與每一個狀態(tài)對應的地址,若其中第一狀態(tài)對應的地址不為空,則表示在該第 一狀態(tài)下有所述模式字符串的后綴被成功匹配,該第一狀態(tài)對應的地址為被成功匹配到的 所述模式字符串的后綴的存儲地址。
[0024] 結(jié)合第二方面,在第三種可能的實現(xiàn)方式中,所述獲取待匹配字符串,根據(jù)所述狀 態(tài)自動機對所述待匹配字符串進行字符串匹配包括:
[0025] 獲取所述待匹配字符串,從所述待匹配字符串的第一位置開始,由至少一個線程 將所述待匹配字符串中的所述第一位置以后的每個字符輸入到所述后綴狀態(tài)自動機中,所 述第一位置為所述前綴在所述待匹配字符串中被成功匹配到的位置,當所使用的線程數(shù)量 大于1時,每兩個線程輸入的所述待匹配字符串中相同位置的字符數(shù)量等于所有所述后綴 中長度的最大值。
[0026] 第三方面,提供一種字符串匹配裝置,所述裝置包括:
[0027] 自動機獲取單元,用于獲取前綴狀態(tài)自動機,所述前綴狀態(tài)自動機是由模式字符 串的前綴按照多模式字符串匹配算法構(gòu)成的狀態(tài)自動機,所述模式字符串為字符串匹配時 所用的特征字符串,所述前綴由從所述模式字符串第一個字符開始逐個提取預設(shè)值個數(shù)的 字符組合而成;
[0028] 匹配單元,用于從所述自動機獲取單元獲取所述前綴狀態(tài)自動機,獲取待匹配字 符串,根據(jù)所述前綴狀態(tài)自動機對所述待匹配字符串進行字符串匹配,以便所述字符串匹 配成功后中央處理器利用所述模式字符串的后綴對所述待匹配字符串進行第二次字符串 匹配。
[0029] 結(jié)合第三方面,在第一種可能的實現(xiàn)方式中,所述自動機獲取單元具體用于:
[0030] 從存儲器中獲取所述前綴狀態(tài)自動機,所述前綴狀態(tài)自動機按照稀疏矩陣的方式 存儲在所述內(nèi)存中,所述稀疏矩陣中的行表示所述前綴狀態(tài)自動機的各個狀態(tài),所述稀疏 矩陣每一列對應一個輸入,所述稀疏矩陣中的列表示所述前綴狀態(tài)自動機接收到每一列對 應的輸入時狀態(tài)跳轉(zhuǎn)的下一跳狀態(tài),其中-1表示在該行所示的狀態(tài)下有字符串被成功匹 配;
[0031] 在所述存儲器中存儲有匹配列表,所述匹配列表包括所述狀態(tài)自動機的每一個狀 態(tài)以及與每一個狀態(tài)對應的地址,若其中第一狀態(tài)對應的地址不為空,貝 1J表不在該第一狀 態(tài)下有所述模式字符串的前綴被成功匹配,該第一狀態(tài)對應的地址為被成功匹配到的所述 模式字符串的前綴的存儲地址。
[0032] 結(jié)合第三方面,在第二種可能的實現(xiàn)方式中,所述匹配單元具體用于:
[0033] 獲取所述待匹配字符串,從所述待匹配字符串的首個字符開始,由至少一個線程 將所述待匹配字符串中的每個字符輸入到所述狀態(tài)自動機中,當所使用的線程數(shù)量大于1 時,每兩個線程輸入的所述待匹配字符串中相同位置的字符數(shù)量等于所述預設(shè)值;
[0034] 當所述待匹配字符串中的每一個字符都在所述前綴狀態(tài)自動機中完成匹配過程, 則生成匹配結(jié)果,并將所述匹配結(jié)果存儲在存儲器中。
[0035] 第四方面,提供一種字符串匹配裝置,所述裝置包括:
[0036] 自動機獲取單元,用于獲取狀態(tài)自動機,所述狀態(tài)自動機是由模式字符串的后綴 按照多模式字符串匹配算法構(gòu)成的狀態(tài)自動機,且所述狀態(tài)自動機不包括狀態(tài)回溯,所述 模式字符串為字符串匹配時所用的特征字符串,所述后綴的長度為所述模式字符串的長度 與預設(shè)值的差值;
[0037] 匹配單元,用于從所述自動機獲取單元獲取所述后綴狀態(tài)自動機,在圖形處理器 對所述待匹配字符串進行字符串匹配成功后,獲取待匹配字符串,根據(jù)所述后綴狀態(tài)自動 機對所述待匹配字符串進行字符串匹配。
[0038] 結(jié)合第四方面,在第一種可能的實現(xiàn)方式中,所屬裝置還包括:
[0039] 拆分單元,用于將所述模式字符串拆分為前綴和后綴,所述前綴由從所述模式字 符串第一個字符開始逐個提取所述預設(shè)值個數(shù)的字符組合而成,