de"分割成"ab,c+,de",將其中的模糊字符串"c+"確定 化為"cc* ",再按照分割后的字符串位置關(guān)系,將其與相鄰的精確字符串"ab"進行合并, 得到 "abc,c*,de" ;
[0109] 例4 :正則表達式"ab(cd)+de"分割成"ab,(cd)+,de",將其中的模糊字符串 "(0(1)+"確定化為(0(1)(0(1)*,最后進行合并得到"313,(0(1),(0(1)*,(16"。
[0110] (2)對于包含分組符的模糊字符串,若內(nèi)部不包含分支符"I"和后綴符或詞組,可 以直接刪除分組符,并盡量與相鄰精確字符串進行合并,這種情況下,上述例4可以進一步 確定化為"abed,(cd) *,de"。
[0111] (3)對于包含分支符的模糊字符串,則嘗試提取公共前綴和后綴字符串,并盡量與 相鄰精確字符串進行合并。
[0112] 例 5 :正則表達式 "x(abcde|abcfe)y" 分割成 "x,(abcde|abcfe),y" 后確定化為 "xabc,(d|f),ey"。
[0113] 若無公共前綴和后綴字符串,但分支數(shù)量較少,且每個分支都具有較長的精確字 符串,可以對模糊字符串進行分支展開。
[0114] 例如:對上述例1進行分支展開后確定化為"20,[01] [\\x09 - \\x0d-~]*,AUTHINFOUSER,finger" 或 "20,[01][\\x09 -\\x0d-~]*,news,finger"〇
[0115] 通過上述幾種確定化的具體實現(xiàn)方式,可以對一些模糊字符串作進一步確定化, 以達到擴展精確字符串長度的目的。
[0116] 另外,關(guān)于上文描述的正則表達式超集的生成方法,下面以PCRE語法正則表達式 為例,來描述如何生成正則表達式超集。
[0117] 如上文描述的正則表達式超集的生成方法包括:對正則表達式進行分割得到精確 字符串和模糊字符串,采用邏輯關(guān)系符號替代所述模糊字符串,根據(jù)所述精確字符串和所 述邏輯關(guān)系符號生成正則表達式超集;所述邏輯關(guān)系符號用于表征所述模糊字符串與其相 鄰的精確字符串之間的邏輯關(guān)系。
[0118] 該方法涉及到的分割部分可以參見上文對S201的相應(yīng)描述部分,在得到精確字 符串和模糊字符串之后,也可以進一步地對模糊字符串作確定化處理,刪除未能確定化的 模糊字符串,并記錄該模糊字符串的數(shù)據(jù)長度范圍。然后將,根據(jù)字符串間的原始位置關(guān)系 和邏輯關(guān)系重新組合成新的表達式,這個新的表達式描述的數(shù)據(jù)集合就是原正則表達式的 超集,在本發(fā)明中稱之為正則表達式超集,一個正則表達式對應(yīng)一個超集。
[0119] 正則表達式超集允許匹配成功的數(shù)據(jù)更廣泛,并且排除了原正則表達式中空間復 雜度和時間復雜度都相對更高的模糊因子多模式匹配部分,具有更高的匹配效率,因而可 以提高第二層過濾的性能。
[0120] 在實際應(yīng)用中可以針對不同語法的正則表達式,結(jié)合正則表達式的特點來生成對 應(yīng)的超集,可以針對常見的模糊字符串形式定義相應(yīng)的邏輯符號或判定符號,一般來說,至 少要包含:順序與、與、或,長度判定符號等邏輯關(guān)系符號。
[0121] 下面給出一種示例:
[0122] (1)字符串間的"順序與"關(guān)系用"表示,例6 :正則表達式abc. *def的表達 式超集為"abc" "def",表達先匹配字符串"abc"再匹配"def"。
[0123] (2)字符串間的"或"關(guān)系用"|"表示。
[0124] 例如:之前例 1 的表達式超集為 "20". ?"AUTHINFOUSER". ? "finger" 或"20". ? "news". ? "finger",引入或符號后進一步表示為:("20". ?"AUTHINFO USER"., "finger")| ("20".? "news".? "finger")。
[0125] (3)字符串間的"與"關(guān)系用"&"表示。
[0126] 優(yōu)選的,("A". ? "B")| ( "B". ? "A")可以優(yōu)化為"A"& "B",例7 :正則表達式 "abc. *def"| "def". *"abc" 的表達式超集為"abc"&"def"。
[0127] (4)和一般的表達式一樣,字符串通過()來提升優(yōu)先級別?;蛘咴跓o需提升優(yōu)先 級的情況下,用來明確字符串分組。比如結(jié)合長度判定符號使用。長度判定符號包括:>, 〉=,〈,〈 =,==。
[0128] 例8 :正則表達式"abc{3}def"的表達式超集為("abc".. "def")== 8,表達 先匹配"abc"再匹配"def"且匹配區(qū)域大小是8。
[0129] 總結(jié)以上例子如下表所示:
[0130]
[0132] 上文描述了本發(fā)明提供的多模式正則表達式匹配方法,下面對本發(fā)明提供的多模 式正則表達式匹配裝置進行解釋說明。
[0133] 參考圖3,圖3是本發(fā)明的多模式正則表達式匹配裝置實施例的結(jié)構(gòu)圖,該裝置可 以包括:
[0134] 第一層過濾單元301,用于按照預先建立的第一層過濾特征集對待匹配數(shù)據(jù)進行 過濾得到第一層過濾的數(shù)據(jù)分片和命中的精確字符串;所述第一層過濾特征集包括:從每 個正則表達式提取的一個長度超過預設(shè)閾值的精確字符串;
[0135] 第二層過濾單元302,用于根據(jù)所述命中的精確字符串查找對應(yīng)的正則表達式超 集,按照所述正則表達式超集對所述第一層過濾的數(shù)據(jù)分片進行第二層過濾得到第二層過 濾的數(shù)據(jù)分片和命中的正則表達式超集;所述正則表達式超集是根據(jù)正則表達式的精確字 符串和模糊字符串的邏輯關(guān)系組成的表達式;
[0136] 匹配單元303,用于根據(jù)所述命中的正則表達式超集確定對應(yīng)的正則表達式,利用 所述正則表達式對所述第二層過濾的數(shù)據(jù)分片作匹配。
[0137] 優(yōu)選的,所述裝置還包括:
[0138] 第一層過濾特征集生成單元,用于生成所述第一層過濾特征集;
[0139] 所述第一層過濾特征集生成單元,包括:
[0140] 字符串分割子單元,用于對每個正則表達式進行分割得到對應(yīng)的精確字符串和模 糊字符串;
[0141] 備選字符串集生成子單元,用于從每個正則表達式對應(yīng)的精確字符串中選擇長度 超過預設(shè)閾值的精確字符串,將選擇的精確字符串組合成備選字符串集;
[0142] 第一過濾特征集生成子單元,用于按照精確字符串的優(yōu)先級順序從所述備選字符 串集中針對每個正則表達式選擇一個精確字符串組合成第一層過濾特征集。
[0143] 優(yōu)選的,所述第一過濾特征集生成單元還包括:
[0144] 確定化子單元,用于將所述模糊字符串進行確定化,并與相鄰的精確字符串分片 合并。
[0145] 優(yōu)選的,所述第一層過濾特征集生成子單元具體用于:
[0146] 按照字符串長度大小關(guān)系來設(shè)置所述備選字符串集中每個正則表達式對應(yīng)的精 確字符串的優(yōu)先級順序,且該優(yōu)先級順序在使用過程中根據(jù)第一層過濾和第二層過濾的結(jié) 果進彳丁調(diào)整;從每個正則表達式對應(yīng)的精確字符串中選擇優(yōu)先級最尚的精確字符串以組合 成第一層過濾特征集。
[0147] 優(yōu)選的,所述裝置還包括:
[0148] 正則表達式超集生成單元,用于對正則表達式進行分割得到精確字符串和模糊字 符串,采用邏輯關(guān)系符號替代所述模糊字符串,根據(jù)所述精確字符串和所述邏輯關(guān)系符號 生成正則表達式超集;所述邏輯關(guān)系符號用于表征所述模糊字符串與其相鄰的精確字符串 之間的邏輯關(guān)系。
[0149] 本發(fā)明提出了通過兩層過濾的方式來提高過濾效果,具體的是按照預先建立的第 一層過濾特征集對待匹配數(shù)據(jù)進行過濾得到第一層過濾的數(shù)據(jù)分片和命中的精確字符串; 所述第一層過濾特征集包括:從每個正則表達式提取的一個長度超過預設(shè)閾值的精確字符 串;這里的第一層過濾特征集保護的精確字符串是按照長度大小提取的,有別于現(xiàn)有技術(shù) 中的精確串,從而使得第一層過濾能起到降低純凈數(shù)據(jù)通過率的作用,由于第一層過濾特 征集里的精確字符串具有每個