本發(fā)明涉及存儲(chǔ)器技術(shù)領(lǐng)域,尤其涉及一種基于硬件查找表的模式字符的查找方法。
背景技術(shù):
字符串匹配即對(duì)一段數(shù)據(jù)進(jìn)行指定字符串的查找匹配,可用于對(duì)帶有指定特征字符串的一段數(shù)據(jù)進(jìn)行篩選、過(guò)濾等應(yīng)用。
現(xiàn)有字符串匹配方法多采用高級(jí)編程語(yǔ)言(如C語(yǔ)言,Java等)編程的軟件方式實(shí)現(xiàn)匹配算法,例如:哈希、KMP算法等,通過(guò)不同的查找順序減少得到匹配結(jié)果的時(shí)間。
但是,用高級(jí)編程語(yǔ)言編程運(yùn)行于CPU(Central Processing Unit,中央處理器),以軟件的形式實(shí)現(xiàn)字符串匹配的方法并行處理能力相對(duì)較差,速度相對(duì)較慢,需考慮運(yùn)行軟件算法的CPU調(diào)度問(wèn)題,不適合用于對(duì)實(shí)時(shí)高速數(shù)據(jù)流進(jìn)行字符串匹配。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述問(wèn)題,本發(fā)明提出了一種基于硬件查找表的查找模式字符串的方法,所述硬件查找表包括至少一個(gè)存儲(chǔ)區(qū);
所述存儲(chǔ)區(qū)包括多個(gè)存儲(chǔ)單元,所述存儲(chǔ)單元于所述存儲(chǔ)區(qū)內(nèi)的訪問(wèn)地址的編址方式對(duì)應(yīng)一預(yù)定編碼字符集,還提供一模式字符串,所述存儲(chǔ)單元的位寬等于所述模式字符串的字符長(zhǎng)度,所述存儲(chǔ)單元的每一位分別順序?qū)?yīng)所述模式字符串中的每個(gè)字符;
還包括以下步驟:
步驟S1,將所述存儲(chǔ)區(qū)中,對(duì)應(yīng)所述模式字符串中每個(gè)字符的所述存儲(chǔ)單元的對(duì)應(yīng)位,置邏輯值1;
步驟S2,獲取一目標(biāo)字符串;
步驟S3,讀取所述目標(biāo)字符串的第一位;
步驟S4,定義讀取到的所述字符為當(dāng)前字符;
步驟S5,以所述預(yù)定編碼字符集對(duì)所述當(dāng)前字符進(jìn)行解碼,以獲取所述當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S6,根據(jù)所述編碼于所述存儲(chǔ)區(qū)查找對(duì)應(yīng)的所述存儲(chǔ)單元;
步驟S7,于所述步驟S6查找到的所述存儲(chǔ)單元中獲取第一位;
步驟S8,判斷所述步驟S7中獲取的所述第一位的值是否為1,如果是則提供一數(shù)字值N,定義N=1,并執(zhí)行所述步驟S9,如果否執(zhí)行所述步驟S17;
步驟S9,判斷所述模式字符串的字符長(zhǎng)度是否等于1,如果是執(zhí)行步驟S16;
步驟S10,判斷所述目標(biāo)字符串剩余的字符長(zhǎng)度是否小于所述模式字符串的長(zhǎng)度-N,如果是執(zhí)行步驟S18;
步驟S11,讀取所述目標(biāo)字符串的下一位,定義讀取到的字符為第二當(dāng)前字符;
步驟S12,以所述預(yù)定編碼字符集對(duì)所述第二當(dāng)前字符進(jìn)行解碼,以獲取所述第二當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S13,根據(jù)所述編碼于所述存儲(chǔ)區(qū)查找對(duì)應(yīng)的所述存儲(chǔ)單元;
步驟S14,令N=N+1,于所述步驟S13查找到的所述存儲(chǔ)單元中獲取第N位;
步驟S15,判斷所述步驟S14中獲取的所述第N位的值是否為1,如果是返回執(zhí)行所述步驟S11,如果否執(zhí)行所述步驟S17;
步驟S16,模式字符串查找成功,退出;
步驟S17,判斷所述當(dāng)前字符是否為所述目標(biāo)字符串的最后一位,如果是執(zhí)行步驟S18,如果否讀取所述目標(biāo)字符串的下一位,并定義讀取到的字符為當(dāng)前字符,返回所述步驟S5。
步驟S18,模式字符串查找失敗。
上述的方法,其中,所述步驟S1包括以下步驟:
步驟S1A,讀取所述模式字符串的第一位字符;
步驟S1B,定義讀取到的所述字符為當(dāng)前字符;
步驟S1C,以所述預(yù)定編碼字符集對(duì)所述當(dāng)前字符進(jìn)行解碼,以獲取所述當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S1D,根據(jù)所述編碼于所述存儲(chǔ)區(qū)查找對(duì)應(yīng)的所述存儲(chǔ)單元;
步驟S1E,根據(jù)所述當(dāng)前字符于所述模式字符串中的位置于所述步驟S1D查找到的所述存儲(chǔ)單元中獲取對(duì)應(yīng)的位;
步驟S1F,將所述步驟S1E中獲取的所述位置邏輯值1;
步驟S1G,判斷所述當(dāng)前字符是否為所述模式字符串的最后一位,如果是執(zhí)行步驟S2,如果否讀取所述模式字符串的下一位,并定義讀取到的字符為當(dāng)前字符,返回所述步驟S1C。
上述的方法,其中,所述預(yù)定編碼字符集為ASCII編碼字符集。
上述的方法,其中,所述存儲(chǔ)單元的數(shù)量為128個(gè)。
上述的方法,其中,所述模式字符串的最大字符長(zhǎng)度為8。
上述的方法,其中,所述步驟S16與所述步驟S17之間,還包括判斷所述目標(biāo)字符串剩余字符長(zhǎng)度是否大于等于所述模式字符串的字符長(zhǎng)度,若否則執(zhí)行所述步驟S18。
一種基于硬件查找表的查找模式字符串的方法,所述硬件查找表包括多個(gè)如上任一所述的存儲(chǔ)區(qū),每個(gè)所述存儲(chǔ)區(qū)中的存儲(chǔ)單元的位寬不同。
上述的方法,其中,所述硬件查找表為靜態(tài)隨機(jī)存取存儲(chǔ)器。
上述的方法,其中,所述存儲(chǔ)區(qū)設(shè)置有8個(gè)。
上述的方法,其中,8個(gè)所述存儲(chǔ)區(qū)按照所述存儲(chǔ)單元位寬大小依次拼合排列,使不同的所述存儲(chǔ)區(qū)中對(duì)應(yīng)相同字符的所述存儲(chǔ)單元以相同的訪問(wèn)地址進(jìn)行訪問(wèn)。
上述的方法,其中,8個(gè)所述存儲(chǔ)區(qū)按照所述存儲(chǔ)單元位寬依次為8位,7位,6位,5位,4位,3位,2位,1位。
有益效果:本發(fā)明提出的一種基于硬件查找表的模式字符的查找方法,采用硬件實(shí)現(xiàn)方式的查找匹配過(guò)程,不占用CPU資源,提高系統(tǒng)并行處理能力,利用硬件運(yùn)行速度快的特點(diǎn),在若干個(gè)硬件時(shí)鐘周期內(nèi)即可得到匹配結(jié)果,能對(duì)實(shí)時(shí)輸入的高速待匹配數(shù)據(jù)流進(jìn)行實(shí)時(shí)的查找匹配結(jié)果輸出。
附圖說(shuō)明
圖1為本發(fā)明一實(shí)施例中基于硬件查找表的模式字符的查找方法的流程示意圖;
圖2為本發(fā)明一實(shí)施例中存儲(chǔ)器的結(jié)構(gòu)示意圖;
圖3為本發(fā)明一實(shí)施例中存儲(chǔ)區(qū)的排列結(jié)構(gòu)示意圖;
圖4為本發(fā)明一實(shí)施例中對(duì)一個(gè)字符長(zhǎng)度的模式字符進(jìn)行查找的示意圖;
圖5為本發(fā)明一實(shí)施例中對(duì)兩個(gè)字符長(zhǎng)度的模式字符進(jìn)行查找的示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步說(shuō)明。
在一個(gè)較佳的實(shí)施例中,如圖1所示,提出了一種基于硬件查找表的查找模式字符串的方法,如圖2所示,硬件查找表可以包括至少一個(gè)存儲(chǔ)區(qū)10;
如圖3所示,存儲(chǔ)區(qū)10可以包括多個(gè)存儲(chǔ)單元20,存儲(chǔ)單元20于存儲(chǔ)區(qū)10內(nèi)的訪問(wèn)地址的編址方式對(duì)應(yīng)一預(yù)定編碼字符集,還提供一模式字符串,存儲(chǔ)單元20的位寬等于模式字符串的字符長(zhǎng)度,存儲(chǔ)單元20的每一位分別順序?qū)?yīng)模式字符串中的每個(gè)字符;
還包括以下步驟:
步驟S1,將存儲(chǔ)區(qū)10中,對(duì)應(yīng)模式字符串中每個(gè)字符的存儲(chǔ)單元20的對(duì)應(yīng)位,置邏輯值1;
步驟S2,獲取一目標(biāo)字符串;
步驟S3,讀取目標(biāo)字符串的第一位;
步驟S4,定義讀取到的字符為當(dāng)前字符;
步驟S5,以預(yù)定編碼字符集對(duì)當(dāng)前字符進(jìn)行解碼,以獲取當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S6,根據(jù)編碼于存儲(chǔ)區(qū)10查找對(duì)應(yīng)的存儲(chǔ)單元20;
步驟S7,于步驟S6查找到的存儲(chǔ)單元20中獲取第一位;
步驟S8,判斷步驟S7中獲取的第一位的值是否為1,如果是則提供一數(shù)字值N,定義N=1,并執(zhí)行步驟S9,如果否執(zhí)行步驟S17;
步驟S9,判斷模式字符串的字符長(zhǎng)度是否等于1,如果是執(zhí)行步驟S16;
步驟S10,判斷目標(biāo)字符串剩余的字符長(zhǎng)度是否小于模式字符串的長(zhǎng)度-N,如果是執(zhí)行步驟S18;
步驟S11,讀取目標(biāo)字符串的下一位,定義讀取到的字符為第二當(dāng)前字符;
步驟S12,以預(yù)定編碼字符集對(duì)第二當(dāng)前字符進(jìn)行解碼,以獲取第二當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S13,根據(jù)編碼于存儲(chǔ)區(qū)10查找對(duì)應(yīng)的存儲(chǔ)單元20;
步驟S14,令N=N+1,于步驟S13查找到的存儲(chǔ)單元20中獲取第N位;
步驟S15,判斷步驟S14中獲取的第N位的值是否為1,如果是返回執(zhí)行步驟S11,如果否執(zhí)行步驟S17;
步驟S16,模式字符串查找成功,退出;
步驟S17,判斷當(dāng)前字符是否為目標(biāo)字符串的最后一位,如果是執(zhí)行步驟S18,如果否讀取目標(biāo)字符串的下一位,并定義讀取到的字符為當(dāng)前字符,返回步驟S5。
步驟S18,模式字符串查找失敗。
在一個(gè)較佳的實(shí)施例中,步驟S1包括以下步驟:
步驟S1A,讀取模式字符串的第一位字符;
步驟S1B,定義讀取到的字符為當(dāng)前字符;
步驟S1C,以預(yù)定編碼字符集對(duì)當(dāng)前字符進(jìn)行解碼,以獲取當(dāng)前字符對(duì)應(yīng)的編碼;
步驟S1D,根據(jù)編碼于存儲(chǔ)區(qū)查10找對(duì)應(yīng)的存儲(chǔ)單元20;
步驟S1E,根據(jù)當(dāng)前字符于模式字符串中的位置于步驟S1D查找到的存儲(chǔ)單元20中獲取對(duì)應(yīng)的位;
步驟S1F,將步驟S1E中獲取的位置邏輯值1;
步驟S1G,判斷當(dāng)前字符是否為模式字符串的最后一位,如果是執(zhí)行步驟S2,如果否讀取模式字符串的下一位,并定義讀取到的字符為當(dāng)前字符,返回步驟S1C。
在一個(gè)較佳的實(shí)施例中,預(yù)定編碼字符集可以為ASCII編碼字符集,也可以是其他種類的編碼字符集,此處的ASCII編碼字符集只是其中一種情況,不應(yīng)視為是對(duì)本發(fā)明的限制。
上述實(shí)施例中,優(yōu)選地,存儲(chǔ)單元20的數(shù)量為128個(gè)。
上述實(shí)施例中,優(yōu)選地,模式字符串的最大字符長(zhǎng)度為8。
在一個(gè)較佳的實(shí)施例中,步驟S16與步驟S17之間,還包括判斷目標(biāo)字符串剩余字符長(zhǎng)度是否大于等于模式字符串的字符長(zhǎng)度,若否則執(zhí)行步驟S18。
在一個(gè)較佳的實(shí)施例中,還提供了一種基于硬件查找表的查找模式字符串的方法,硬件查找表包括多個(gè)如上任一的存儲(chǔ)區(qū)10,每個(gè)存儲(chǔ)區(qū)中的存儲(chǔ)單元20的位寬不同。
在一個(gè)較佳的實(shí)施例中,硬件查找表為靜態(tài)隨機(jī)存取存儲(chǔ)器。
在一個(gè)較佳的實(shí)施例中,存儲(chǔ)區(qū)10設(shè)置有8個(gè)。
在一個(gè)較佳的實(shí)施例中,8個(gè)存儲(chǔ)區(qū)10按照存儲(chǔ)單元20位寬大小依次拼合排列,使不同的存儲(chǔ)區(qū)10中對(duì)應(yīng)相同字符的存儲(chǔ)單元20以相同的訪問(wèn)地址進(jìn)行訪問(wèn)。
在一個(gè)較佳的實(shí)施例中,如圖3所示,8個(gè)存儲(chǔ)區(qū)10按照存儲(chǔ)單元20位寬依次為8位,7位,6位,5位,4位,3位,2位,1位。
具體地,圖3中存儲(chǔ)區(qū)10中的存儲(chǔ)單元從右往左存儲(chǔ)空間依次增加,最大存儲(chǔ)空間為8位;圖4中是對(duì)一個(gè)字符長(zhǎng)度的模式字符進(jìn)行查找的示意圖;圖5中是對(duì)兩個(gè)字符長(zhǎng)度的模式字符進(jìn)行查找的示意圖,在這種存儲(chǔ)單元20從右往左存儲(chǔ)空間依次增加的先定下,存儲(chǔ)單元20的最大存儲(chǔ)空間為8位,即能查找的模式串的最大字符長(zhǎng)度為8個(gè)字符長(zhǎng)度。
綜上所述,本發(fā)明提出的一種基于硬件查找表的模式字符的查找方法,采用硬件實(shí)現(xiàn)方式的查找匹配過(guò)程,不占用CPU資源,提高系統(tǒng)并行處理能力,利用硬件運(yùn)行速度快的特點(diǎn),在若干個(gè)硬件時(shí)鐘周期內(nèi)即可得到匹配結(jié)果,能對(duì)實(shí)時(shí)輸入的高速待匹配數(shù)據(jù)流進(jìn)行實(shí)時(shí)的查找匹配結(jié)果輸出。
通過(guò)說(shuō)明和附圖,給出了具體實(shí)施方式的特定結(jié)構(gòu)的典型實(shí)施例,基于本發(fā)明精神,還可作其他的轉(zhuǎn)換。盡管上述發(fā)明提出了現(xiàn)有的較佳實(shí)施例,然而,這些內(nèi)容并不作為局限。
對(duì)于本領(lǐng)域的技術(shù)人員而言,閱讀上述說(shuō)明后,各種變化和修正無(wú)疑將顯而易見(jiàn)。因此,所附的權(quán)利要求書應(yīng)看作是涵蓋本發(fā)明的真實(shí)意圖和范圍的全部變化和修正。在權(quán)利要求書范圍內(nèi)任何和所有等價(jià)的范圍與內(nèi)容,都應(yīng)認(rèn)為仍屬本發(fā)明的意圖和范圍內(nèi)。