本申請涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種字符串匹配的方法及設(shè)備。
背景技術(shù):
:字符串匹配是在一個大的目標(biāo)字符串?dāng)?shù)據(jù)庫中搜索出某個給定模式字符串位置的過程,字符串匹配應(yīng)用比較廣泛,比如,在入侵檢測系統(tǒng)中,為了對網(wǎng)絡(luò)系統(tǒng)的運(yùn)行狀態(tài)進(jìn)行監(jiān)視,發(fā)現(xiàn)各種攻擊企圖、攻擊行為或者攻擊結(jié)果,保證系統(tǒng)資源的機(jī)密性和可用性,需要對獲取的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行檢測是否存在入侵的非法數(shù)據(jù),首先針對一類數(shù)據(jù)包的所有已知的入侵行為的模式字符串分別放在模式字符串庫中,對入侵的非法數(shù)據(jù)的檢測,可以通過字符串匹配,確定獲取的網(wǎng)絡(luò)數(shù)據(jù)包的字符串中是否存在模式字符串庫中的模式字符串,如果存在,表示存在入侵行為。目前,數(shù)據(jù)庫中的字符串通常以表格形式存儲,取出表格的某些行某些列的數(shù)據(jù),可以看做為矩陣數(shù)據(jù),在數(shù)據(jù)庫表中查找給定字符串的子串的需求時,是將矩陣數(shù)據(jù)逐行取出,再將每個字段和字符串進(jìn)行匹配,顯然需要遍歷整個矩陣數(shù)據(jù),其中執(zhí)行了很多無用工,匹配效率低下。申請內(nèi)容本申請的一個目的是提供一種字符串匹配的方法及設(shè)備,解決現(xiàn)有技術(shù)中查找給定字符串的子串時匹配效率低下的問題。根據(jù)本申請的一個方面,提供了一種字符串匹配的方法,該方法包括:步驟一,確定矩陣數(shù)據(jù)的待匹配的列,將所述待匹配的列中的數(shù)據(jù)與匹配字符串進(jìn)行多模匹配,得到列匹配結(jié)果;步驟二,根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行;步驟三,判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,若是,則刪除標(biāo)記的行中的字段,從剩余列中重新選取所述矩陣數(shù)據(jù)的待匹配的列;重復(fù)循環(huán)以上步驟一至步驟三,直至所述矩陣數(shù)據(jù)無剩余列或剩余列數(shù)未滿足匹配處理?xiàng)l件。進(jìn)一步地,在上述方法中,根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,包括:確定所述列匹配結(jié)果中匹配成功的行對應(yīng)的行數(shù)據(jù);將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)中的已匹配成功字段是否滿足預(yù)設(shè)的匹配成功條件,得到多模匹配結(jié)果。進(jìn)一步地,在上述方法中,所述預(yù)設(shè)的匹配成功條件包括:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,其中,1≤n≤j,j為矩陣數(shù)據(jù)的列數(shù),n和j為自然數(shù);矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,其中,m為自然數(shù)。進(jìn)一步地,在上述方法中,將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)中的已匹配成功字段是否滿足預(yù)設(shè)的匹配成功條件,得到多模匹配結(jié)果,包括:將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,若已匹配成功的字段數(shù)與未處理的字段數(shù)之和小于n,則所述行數(shù)據(jù)的多模匹配結(jié)果為匹配失敗。進(jìn)一步地,在上述方法中,判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,包括:判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否大于等于n,若否,則所述矩陣數(shù)據(jù)匹配失敗。進(jìn)一步地,根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行,包括:將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)的多模匹配是否滿足預(yù)設(shè)的匹配成功條件中的一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,若是,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配成功,并標(biāo)記所述行數(shù)據(jù)的行號及記錄匹配成功的字段;若否,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配失敗,并標(biāo)記所述行數(shù)據(jù)的行號。根據(jù)本申請的另一方面,還提供了一種字符串匹配的設(shè)備,所述設(shè)備包括:列匹配裝置,用于確定矩陣數(shù)據(jù)的待匹配的列,將所述待匹配的列中的數(shù)據(jù)與匹配字符串進(jìn)行多模匹配,得到列匹配結(jié)果;行匹配裝置,用于根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行;判斷裝置,用于判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,若是,則刪除標(biāo)記的行中的字段,從剩余列中重新選取所述矩陣數(shù)據(jù)的待匹配的列;重復(fù)循環(huán)以上列匹配裝置、行匹配裝置及判斷裝置中的執(zhí)行步驟,直至所述矩陣數(shù)據(jù)無剩余列或剩余列數(shù)未滿足匹配處理?xiàng)l件。進(jìn)一步地,在上述設(shè)備中,所述行匹配裝置用于:確定所述列匹配結(jié)果中匹配成功的行對應(yīng)的行數(shù)據(jù);將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)中的已匹配成功字段是否滿足預(yù)設(shè)的匹配成功條件,得到多模匹配結(jié)果。進(jìn)一步地,所述預(yù)設(shè)的匹配成功條件包括:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,其中,1≤n≤j,j為矩陣數(shù)據(jù)的列數(shù),n和j為自然數(shù);矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,其中,m為自然數(shù)。進(jìn)一步地,所述行匹配裝置用于:將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,若已匹配成功的字段數(shù)與未處理的字段數(shù)之和小于n,則所述行數(shù)據(jù)的多模匹配結(jié)果為匹配失敗。進(jìn)一步地,在上述設(shè)備中,所述行匹配裝置用于:判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否大于等于n,若否,則所述矩陣數(shù)據(jù)匹配失敗。進(jìn)一步地,所述行匹配裝置用于:將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)的多模匹配是否滿足預(yù)設(shè)的匹配成功條件中的一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,若是,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配成功,并標(biāo)記所述行數(shù)據(jù)的行號及記錄匹配成功的字段;若否,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配失敗,并標(biāo)記所述行數(shù)據(jù)的行號。與現(xiàn)有技術(shù)相比,本申請通過步驟一,確定矩陣數(shù)據(jù)的待匹配的列,將所述待匹配的列中的數(shù)據(jù)與匹配字符串進(jìn)行多模匹配,得到列匹配結(jié)果;步驟二,根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行;步驟三,判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,若是,則刪除標(biāo)記的行中的字段,從剩余列中重新選取所述矩陣數(shù)據(jù)的待匹配的列;重復(fù)循環(huán)以上步驟一至步驟三,直至所述矩陣數(shù)據(jù)無剩余列或剩余列數(shù)未滿足匹配處理?xiàng)l件。從而大多數(shù)情況下無需遍歷整個矩陣數(shù)據(jù),省去了無用工,大幅度提高匹配效率。附圖說明通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會變得更明顯:圖1示出根據(jù)本申請的一個方面提供的一種字符串匹配的方法流程示意圖;圖2示出本申請中的一實(shí)施例的矩陣數(shù)據(jù)字符串匹配的流程示意圖;圖3示出根據(jù)本申請的另一個方面提供的一種字符串匹配的設(shè)備結(jié)構(gòu)示意圖。附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。具體實(shí)施方式下面結(jié)合附圖對本申請作進(jìn)一步詳細(xì)描述。在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。圖1示出根據(jù)本申請的一個方面提供的一種字符串匹配的方法流程示意圖,該方法包括:步驟s1,確定矩陣數(shù)據(jù)的待匹配的列,將所述待匹配的列中的數(shù)據(jù)與匹配字符串進(jìn)行多模匹配,得到列匹配結(jié)果;在此,將一行匹配變?yōu)槎嘈衅ヅ洌慈〕鲆涣袛?shù)據(jù),通過獲取矩陣數(shù)據(jù)中待匹配的列,對待匹配的列中每行字段進(jìn)行匹配,得到匹配結(jié)果,從而完成由單模匹配變?yōu)槎嗄Fヅ洌岣咂ヅ湫?。在本申請一?shí)施例中,矩陣數(shù)據(jù)為3行4列,選出第一列數(shù)據(jù),對第一列中的第一行至第三行數(shù)據(jù)進(jìn)行與字符串匹配,若至少存在一行是匹配成功的,則該第一列數(shù)據(jù)的列匹配結(jié)果為成功,否則,列匹配結(jié)果為失敗。步驟s2,根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行;在本申請一實(shí)施例中,只對列匹配成功的行進(jìn)行逐個字段匹配,并標(biāo)記經(jīng)過多模匹配的行,以便下次直接排除不處理。例如,上述三行四列的矩陣數(shù)據(jù),第一列的列匹配結(jié)果為第二行的數(shù)據(jù)匹配成功,則選取第二行數(shù)據(jù),此時是包括其他列的第二行數(shù)據(jù),逐個字段進(jìn)行匹配,得到行匹配結(jié)果。步驟s3,判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,若是,則刪除標(biāo)記的行中的字段,從剩余列中重新選取所述矩陣數(shù)據(jù)的待匹配的列;在本申請一實(shí)施例中,在一次列匹配完成后,若剩余列數(shù)不滿足匹配處理?xiàng)l件,則判定此矩陣數(shù)據(jù)匹配失敗,若還滿足匹配處理?xiàng)l件,則繼續(xù)從剩余列中重新選取待匹配的列,重復(fù)循環(huán)以上步驟s1至步驟s3,直至所述矩陣數(shù)據(jù)無剩余列或剩余列數(shù)未滿足匹配處理?xiàng)l件。在本申請一實(shí)施例中,如表1所示的4行5列的矩陣數(shù)據(jù),a1b1c1d1e1a2b2c2d2e2a3b3c3d3e3a4b4c4d4e4表1首先取出第一列,設(shè)為集合set_a(a1,a2,a3,a4),對set_a進(jìn)行匹配,若a2匹配成功,則對這一行的剩余字段b2,c2,d2,e2進(jìn)行逐個匹配,當(dāng)這行數(shù)據(jù)處理完,不需要再次處理,因此進(jìn)行標(biāo)記排除掉,將a2從set_a中剔除,再對set_a(a1,a3,a4)進(jìn)行匹配,若匹配成功,則對這一行的剩余字段b3,c3,d3,e3進(jìn)行逐字段匹配,并進(jìn)行標(biāo)記,下次直接排除,再將a3從set_a中剔除,循環(huán)對此列匹配,直至此列匹配失敗,則再取出第二列時,只比對set_b(b1,b4),若b4匹配成功,對剩余字段c4,d4,e4進(jìn)行匹配,并進(jìn)行標(biāo)記,下次直接排除,依此類推,處理過的行無論是匹配成功還是匹配失敗,都需要進(jìn)行標(biāo)記,下次直接排除不處理,從而縮短遍歷矩陣數(shù)據(jù)的時間,大大提高了匹配效率。具體地,所述預(yù)設(shè)的匹配成功條件包括:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,其中,1≤n≤j,j為矩陣數(shù)據(jù)的列數(shù),n和j為自然數(shù);矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,其中,m為自然數(shù)。在此,如預(yù)先設(shè)置匹配成功的條件中n和m的值,則匹配時滿足條件是:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n且矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,比如,設(shè)置n=3,m=2,則一行數(shù)據(jù)中匹配成功的字段數(shù)只要大于等于3,則匹配結(jié)果為成功,矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于2,則矩陣數(shù)據(jù)匹配成功,如第一行和第三行的行匹配結(jié)果為成功,滿足總共成功匹配的行數(shù)條件,則該矩陣數(shù)據(jù)匹配成功。優(yōu)選地,在步驟s2中,確定所述列匹配結(jié)果中匹配成功的行對應(yīng)的行數(shù)據(jù);將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)中的已匹配成功字段是否滿足預(yù)設(shè)的匹配成功條件,得到多模匹配結(jié)果。在本申請一實(shí)施例中,選取矩陣數(shù)據(jù)中的一列數(shù)據(jù)進(jìn)行匹配后,確定對應(yīng)的匹配成功的行,如所選取的列中第二行數(shù)據(jù)匹配成功,則選取該第二行的其他數(shù)據(jù)進(jìn)行逐字段匹配,判斷第二行的數(shù)據(jù)中已匹配成功的字段是否滿足匹配成功條件,若滿足,則第二行的多模匹配結(jié)果為成功。需要說明的是,將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,若已匹配成功的字段數(shù)與未處理的字段數(shù)之和小于n,則所述行數(shù)據(jù)的多模匹配結(jié)果為匹配失敗。此時,不用再處理剩余的字段,省去了無用工。進(jìn)一步地,判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,包括:判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否大于等于n,若否,則所述矩陣數(shù)據(jù)匹配失敗。在此,在一次列匹配完成后,若剩余列數(shù)<n,則判定此矩陣數(shù)據(jù)匹配失敗。例如,表2所示的3行4列的數(shù)據(jù)矩陣,a1b1c1a2b2c2a3b3c3表2假設(shè)n=2,m=1,表示只要存在1行中的2個字段匹配成功,則該矩陣數(shù)據(jù)匹配成功。首先,取出第一列進(jìn)行匹配,一次列匹配完成后,若a2匹配成功,則對b2,c2逐字段進(jìn)行匹配,若b2匹配成功,則判定第二行匹配成功,且滿足m=1的條件,則判定此矩陣數(shù)據(jù)匹配成功,后續(xù)的c2也就沒必要再進(jìn)行匹配,若b2匹配失敗,則對c2進(jìn)行匹配,若c2匹配成功,則判定第二行匹配成功,且滿足m=1的條件,則判定此矩陣數(shù)據(jù)匹配成功。當(dāng)取出的第一列沒有匹配成功時,即a1、a2、a3都沒有匹配成功,則從剩余兩列中再取出第二列進(jìn)行匹配,列匹配完成后,若列匹配結(jié)果為匹配失敗,則剩余1列,此時1<n,表示前面矩陣數(shù)據(jù)還沒有被匹配成功,即使第三列進(jìn)行匹配成功,則匹配成功的一行中只有一個字段匹配成功,無法滿足匹配成功條件n=2,判定該矩陣數(shù)據(jù)為失敗,因此在進(jìn)行多模匹配過程中,若不滿足預(yù)設(shè)的匹配條件,則停止后續(xù)的匹配流程,判定該矩陣數(shù)據(jù)匹配失敗,避免了遍歷整個矩陣數(shù)據(jù)后依然為匹配失敗,做無用工,提高查詢結(jié)果的效率。在步驟s2中,將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)的多模匹配是否滿足預(yù)設(shè)的匹配成功條件中的一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,若是,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配成功,并標(biāo)記所述行數(shù)據(jù)的行號及記錄匹配成功的字段;若否,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配失敗,并標(biāo)記所述行數(shù)據(jù)的行號。在本申請一實(shí)施例中,如圖2所示的匹配流程圖,用k表示將要處理的矩陣數(shù)據(jù)中的列號,從k=1開始,獲取第一列數(shù)據(jù)(當(dāng)前面已經(jīng)處理過其他列時,此時獲取到的列數(shù)據(jù)需要刪除已經(jīng)處理過的行字段),將這組數(shù)據(jù)與字符串進(jìn)行多模匹配,若多模匹配成功,則獲取這行數(shù)據(jù),判斷這一行數(shù)據(jù)是否滿足匹配條件,當(dāng)滿足匹配條件時,記錄這一行相關(guān)信息,包括行號、字段,以便顯示查詢結(jié)果及方便判斷是否滿足矩陣匹配條件,判斷記錄中成功匹配的行數(shù)是否大于等于m,若是,則匹配成功,若否,則記錄這一行號,以便下次獲取數(shù)據(jù)時排除該行數(shù)據(jù),將這一字段從這組數(shù)據(jù)中刪除后再次進(jìn)行多模匹配,即重新將這組數(shù)據(jù)與字符串進(jìn)行多模匹配,若多模匹配的結(jié)果為失敗,則判斷剩余列數(shù)是否滿足小于n,若是,則矩陣數(shù)據(jù)匹配失敗,若否,則獲取后面的列數(shù)據(jù),進(jìn)行多模匹配。在本申請一實(shí)施例中,假設(shè)字符串為:string=“mynameisbob”,匹配條件為:n=3,m=2,矩陣數(shù)據(jù)a如下表3所示:aaaaaamyaaaaaammisbbcccyymecccddddddddddddddd表3可以判定矩陣數(shù)據(jù)a匹配成功,原因?yàn)椋旱诙械拿總€字段與第三行的第二、三、四字段都可以在字符串string中找到,滿足匹配條件。需要說明的是,在匹配過程中,第二行前三個字段匹配成功后,就已經(jīng)判定第二行滿足行匹配條件,后面兩個字段無需再進(jìn)行匹配。每行的字段跟string進(jìn)行匹配,是在string中查找整個字段,比如字段“y”為匹配成功,而字段“yy”為匹配失敗。在本申請又一實(shí)施例中,依然假設(shè)字符串為:string=“mynameisbob”,匹配條件為:n=3,m=2,待匹配的矩陣數(shù)據(jù)為以下兩個4行5列的矩陣:aaaaaamyaaaaaabbbmyisbbbbobamcccbomecccddddddddddddddd矩陣數(shù)據(jù)1aaaaaamyaaaaaabbbmyisbbbbobcccccccccmecccddddddddddddddd矩陣數(shù)據(jù)2匹配結(jié)果為:矩陣數(shù)據(jù)1匹配成功,矩陣數(shù)據(jù)2匹配失敗。對于矩陣數(shù)據(jù)1,第二行2,3,5字段和第三行1,3,4字段在字符串string中能找到對應(yīng)子串,滿足匹配成功條件的n=3和m=2,因此匹配成功;而對于矩陣數(shù)據(jù)2,第二行2,3,5字段在字符串string中能找到對應(yīng)子串,滿足匹配成功條件中的n=3的只有第二行,因此匹配成功的行數(shù)只有1行,不滿足m=2的匹配成功條件,因此匹配失敗。下面以矩陣數(shù)據(jù)2的具體匹配過程進(jìn)行說明:首先取出第一列進(jìn)行匹配,匹配失敗,剩余列數(shù)是4>n,再匹配第二列,發(fā)現(xiàn)第二行匹配成功,然后對第二行3,4,5字段逐個匹配,發(fā)現(xiàn)第二行匹配成功,記錄成功并標(biāo)記,此時匹配成功行數(shù)是1<m,未滿足第二條件m=2,之后剔除第二行,再對第二列剩余字段進(jìn)行匹配,匹配失敗,剩余列數(shù)是3=n,獲取第三列數(shù)據(jù),并剔除掉第二行數(shù)據(jù),進(jìn)行匹配,發(fā)現(xiàn)匹配失敗,此時剩余列數(shù)為2<n,假設(shè)后兩列的字段都匹配成功,但每行僅有兩個字段匹配成功,不滿足成功匹配條件第一條n=3,所以沒有必要對后兩列進(jìn)行匹配,則可判定匹配失敗。綜上所述,通過本申請所述的矩陣數(shù)據(jù)的字符串匹配技術(shù),在大多數(shù)實(shí)際應(yīng)用場景中無需遍歷整個矩陣數(shù)據(jù),省去了無用工,大幅度提高匹配效率,在數(shù)據(jù)庫表中快速準(zhǔn)確地查找給定字符串的子串。圖3示出根據(jù)本申請的另一個方面提供的一種字符串匹配的設(shè)備結(jié)構(gòu)示意圖,該設(shè)備包括:列匹配裝置1、行匹配裝置2和判斷裝置3,列匹配裝置1,用于確定矩陣數(shù)據(jù)的待匹配的列,將所述待匹配的列中的數(shù)據(jù)與匹配字符串進(jìn)行多模匹配,得到列匹配結(jié)果;在此,將一行匹配變?yōu)槎嘈衅ヅ洌慈〕鲆涣袛?shù)據(jù),通過獲取矩陣數(shù)據(jù)中待匹配的列,對待匹配的列中每行字段進(jìn)行匹配,得到匹配結(jié)果,從而完成由單模匹配變?yōu)槎嗄Fヅ?,提高匹配效率。在本申請一?shí)施例中,矩陣數(shù)據(jù)為3行4列,選出第一列數(shù)據(jù),對第一列中的第一行至第三行數(shù)據(jù)進(jìn)行與字符串匹配,若至少存在一行是匹配成功的,則該第一列數(shù)據(jù)的列匹配結(jié)果為成功,否則,列匹配結(jié)果為失敗。行匹配裝置2,用于根據(jù)預(yù)設(shè)的匹配成功條件將所述列匹配結(jié)果中匹配成功的行中的字段與字符串進(jìn)行多模匹配,得到多模匹配結(jié)果,并標(biāo)記經(jīng)過多模匹配的行;在本申請一實(shí)施例中,只對列匹配成功的行進(jìn)行逐個字段匹配,并標(biāo)記經(jīng)過多模匹配的行,以便下次直接排除不處理。例如,上述三行四列的矩陣數(shù)據(jù),第一列的列匹配結(jié)果為第二行的數(shù)據(jù)匹配成功,則選取第二行數(shù)據(jù),此時是包括其他列的第二行數(shù)據(jù),逐個字段進(jìn)行匹配,得到行匹配結(jié)果。判斷裝置3,用于判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否滿足匹配處理?xiàng)l件,若否,則所述矩陣數(shù)據(jù)匹配失敗,若是,則刪除標(biāo)記的行中的字段,從剩余列中重新選取所述矩陣數(shù)據(jù)的待匹配的列;在本申請一實(shí)施例中,在一次列匹配完成后,若剩余列數(shù)不滿足匹配處理?xiàng)l件,則判定此矩陣數(shù)據(jù)匹配失敗,若還滿足匹配處理?xiàng)l件,則繼續(xù)從剩余列中重新選取待匹配的列,重復(fù)循環(huán)執(zhí)行以上列匹配裝置1、行匹配裝置2和判斷裝置3中的執(zhí)行步驟,直至所述矩陣數(shù)據(jù)無剩余列或剩余列數(shù)未滿足匹配處理?xiàng)l件。在本申請一實(shí)施例中,如表1所示的4行5列的矩陣數(shù)據(jù),a1b1c1d1e1a2b2c2d2e2a3b3c3d3e3a4b4c4d4e4表1首先取出第一列,設(shè)為集合set_a(a1,a2,a3,a4),對set_a進(jìn)行匹配,若a2匹配成功,則對這一行的剩余字段b2,c2,d2,e2進(jìn)行逐個匹配,當(dāng)這行數(shù)據(jù)處理完,不需要再次處理,因此進(jìn)行標(biāo)記排除掉,將a2從set_a中剔除,再對set_a(a1,a3,a4)進(jìn)行匹配,若匹配成功,則對這一行的剩余字段b3,c3,d3,e3進(jìn)行逐字段匹配,并進(jìn)行標(biāo)記,下次直接排除,再將a3從set_a中剔除,循環(huán)對此列匹配,直至此列匹配失敗,則再取出第二列時,只比對set_b(b1,b4),若b4匹配成功,對剩余字段c4,d4,e4進(jìn)行匹配,并進(jìn)行標(biāo)記,下次直接排除,依此類推,處理過的行無論是匹配成功還是匹配失敗,都需要進(jìn)行標(biāo)記,下次直接排除不處理,從而縮短遍歷矩陣數(shù)據(jù)的時間,大大提高了匹配效率。具體地,所述預(yù)設(shè)的匹配成功條件包括:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,其中,1≤n≤j,j為矩陣數(shù)據(jù)的列數(shù),n和j為自然數(shù);矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,其中,m為自然數(shù)。在此,如預(yù)先設(shè)置匹配成功的條件中n和m的值,則匹配時滿足條件是:一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n且矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于m,比如,設(shè)置n=3,m=2,則一行數(shù)據(jù)中匹配成功的字段數(shù)只要大于等于3,則匹配結(jié)果為成功,矩陣數(shù)據(jù)中總共成功匹配的行數(shù)大于等于2,則矩陣數(shù)據(jù)匹配成功,如第一行和第三行的行匹配結(jié)果為成功,滿足總共成功匹配的行數(shù)條件,則該矩陣數(shù)據(jù)匹配成功。優(yōu)選地,行匹配裝置2,用于確定所述列匹配結(jié)果中匹配成功的行對應(yīng)的行數(shù)據(jù);將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)中的已匹配成功字段是否滿足預(yù)設(shè)的匹配成功條件,得到多模匹配結(jié)果。在本申請一實(shí)施例中,選取矩陣數(shù)據(jù)中的一列數(shù)據(jù)進(jìn)行匹配后,確定對應(yīng)的匹配成功的行,如所選取的列中第二行數(shù)據(jù)匹配成功,則選取該第二行的其他數(shù)據(jù)進(jìn)行逐字段匹配,判斷第二行的數(shù)據(jù)中已匹配成功的字段是否滿足匹配成功條件,若滿足,則第二行的多模匹配結(jié)果為成功。需要說明的是,將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,若已匹配成功的字段數(shù)與未處理的字段數(shù)之和小于n,則所述行數(shù)據(jù)的多模匹配結(jié)果為匹配失敗。此時,不用再處理剩余的字段,省去了無用工。進(jìn)一步地,行匹配裝置2用于:判斷所述矩陣數(shù)據(jù)的剩余列數(shù)是否大于等于n,若否,則所述矩陣數(shù)據(jù)匹配失敗。在此,在一次列匹配完成后,若剩余列數(shù)<n,則判定此矩陣數(shù)據(jù)匹配失敗。例如,表2所示的3行4列的數(shù)據(jù)矩陣,a1b1c1a2b2c2a3b3c3表2假設(shè)n=2,m=1,表示只要存在1行中的2個字段匹配成功,則該矩陣數(shù)據(jù)匹配成功。首先,取出第一列進(jìn)行匹配,一次列匹配完成后,若a2匹配成功,則對b2,c2逐字段進(jìn)行匹配,若b2匹配成功,則判定第二行匹配成功,且滿足m=1的條件,則判定此矩陣數(shù)據(jù)匹配成功,后續(xù)的c2也就沒必要再進(jìn)行匹配,若b2匹配失敗,則對c2進(jìn)行匹配,若c2匹配成功,則判定第二行匹配成功,且滿足m=1的條件,則判定此矩陣數(shù)據(jù)匹配成功。當(dāng)取出的第一列沒有匹配成功時,即a1、a2、a3都沒有匹配成功,則從剩余兩列中再取出第二列進(jìn)行匹配,列匹配完成后,若列匹配結(jié)果為匹配失敗,則剩余1列,此時1<n,表示前面矩陣數(shù)據(jù)還沒有被匹配成功,即使第三列進(jìn)行匹配成功,則匹配成功的一行中只有一個字段匹配成功,無法滿足匹配成功條件n=2,判定該矩陣數(shù)據(jù)為失敗,因此在進(jìn)行多模匹配過程中,若不滿足預(yù)設(shè)的匹配條件,則停止后續(xù)的匹配流程,判定該矩陣數(shù)據(jù)匹配失敗,避免了遍歷整個矩陣數(shù)據(jù)后依然為匹配失敗,做無用工,提高查詢結(jié)果的效率。行匹配裝置2,用于將所述行數(shù)據(jù)逐字段與字符串進(jìn)行多模匹配,判斷所述行數(shù)據(jù)的多模匹配是否滿足預(yù)設(shè)的匹配成功條件中的一行數(shù)據(jù)中匹配成功的字段數(shù)大于等于n,若是,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配成功,并標(biāo)記所述行數(shù)據(jù)的行號及記錄匹配成功的字段;若否,則得到匹配結(jié)果為所述行數(shù)據(jù)匹配失敗,并標(biāo)記所述行數(shù)據(jù)的行號。在本申請一實(shí)施例中,如圖2所示的匹配流程圖,用k表示將要處理的矩陣數(shù)據(jù)中的列號,從k=1開始,獲取第一列數(shù)據(jù)(當(dāng)前面已經(jīng)處理過其他列時,此時獲取到的列數(shù)據(jù)需要刪除已經(jīng)處理過的行字段),將這組數(shù)據(jù)與字符串進(jìn)行多模匹配,若多模匹配成功,則獲取這行數(shù)據(jù),判斷這一行數(shù)據(jù)是否滿足匹配條件,當(dāng)滿足匹配條件時,記錄這一行相關(guān)信息,包括行號、字段,以便顯示查詢結(jié)果及方便判斷是否滿足矩陣匹配條件,判斷記錄中成功匹配的行數(shù)是否大于等于m,若是,則匹配成功,若否,則記錄這一行號,以便下次獲取數(shù)據(jù)時排除該行數(shù)據(jù),將這一字段從這組數(shù)據(jù)中刪除后再次進(jìn)行多模匹配,即重新將這組數(shù)據(jù)與字符串進(jìn)行多模匹配,若多模匹配的結(jié)果為失敗,則判斷剩余列數(shù)是否滿足小于n,若是,則矩陣數(shù)據(jù)匹配失敗,若否,則獲取后面的列數(shù)據(jù),進(jìn)行多模匹配。在本申請一實(shí)施例中,假設(shè)字符串為:string=“mynameisbob”,匹配條件為:n=3,m=2,矩陣數(shù)據(jù)a如下表3所示:aaaaaamyaaaaaammisbbcccyymecccddddddddddddddd表3可以判定矩陣數(shù)據(jù)a匹配成功,原因?yàn)椋旱诙械拿總€字段與第三行的第二、三、四字段都可以在字符串string中找到,滿足匹配條件。需要說明的是,在匹配過程中,第二行前三個字段匹配成功后,就已經(jīng)判定第二行滿足行匹配條件,后面兩個字段無需再進(jìn)行匹配。每行的字段跟string進(jìn)行匹配,是在string中查找整個字段,比如字段“y”為匹配成功,而字段“yy”為匹配失敗。在本申請又一實(shí)施例中,依然假設(shè)字符串為:string=“mynameisbob”,匹配條件為:n=3,m=2,待匹配的矩陣數(shù)據(jù)為以下兩個4行5列的矩陣:aaaaaamyaaaaaabbbmyisbbbbobamcccbomecccddddddddddddddd矩陣數(shù)據(jù)1aaaaaamyaaaaaabbbmyisbbbbobcccccccccmecccddddddddddddddd矩陣數(shù)據(jù)2匹配結(jié)果為:矩陣數(shù)據(jù)1匹配成功,矩陣數(shù)據(jù)2匹配失敗。對于矩陣數(shù)據(jù)1,第二行2,3,5字段和第三行1,3,4字段在字符串string中能找到對應(yīng)子串,滿足匹配成功條件的n=3和m=2,因此匹配成功;而對于矩陣數(shù)據(jù)2,第二行2,3,5字段在字符串string中能找到對應(yīng)子串,滿足匹配成功條件中的n=3的只有第二行,因此匹配成功的行數(shù)只有1行,不滿足m=2的匹配成功條件,因此匹配失敗。下面以矩陣數(shù)據(jù)2的具體匹配過程進(jìn)行說明:首先取出第一列進(jìn)行匹配,匹配失敗,剩余列數(shù)是4>n,再匹配第二列,發(fā)現(xiàn)第二行匹配成功,然后對第二行3,4,5字段逐個匹配,發(fā)現(xiàn)第二行匹配成功,記錄成功并標(biāo)記,此時匹配成功行數(shù)是1<m,未滿足第二條件m=2,之后剔除第二行,再對第二列剩余字段進(jìn)行匹配,匹配失敗,剩余列數(shù)是3=n,獲取第三列數(shù)據(jù),并剔除掉第二行數(shù)據(jù),進(jìn)行匹配,發(fā)現(xiàn)匹配失敗,此時剩余列數(shù)為2<n,假設(shè)后兩列的字段都匹配成功,但每行僅有兩個字段匹配成功,不滿足成功匹配條件第一條n=3,所以沒有必要對后兩列進(jìn)行匹配,則可判定匹配失敗。綜上所述,通過本申請所述的矩陣數(shù)據(jù)的字符串匹配技術(shù),在大多數(shù)實(shí)際應(yīng)用場景中無需遍歷整個矩陣數(shù)據(jù),省去了無用工,大幅度提高匹配效率,在數(shù)據(jù)庫表中快速準(zhǔn)確地查找給定字符串的子串。顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(asic)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個實(shí)施例中,本申請的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。另外,本申請的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時,通過該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實(shí)施例包括一個裝置,該裝置包括用于存儲計(jì)算機(jī)程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請的多個實(shí)施例的方法和/或技術(shù)方案。對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。當(dāng)前第1頁12