專利名稱::基于fa的表項(xiàng)壓縮方法及裝置、表項(xiàng)匹配方法及裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)結(jié)構(gòu)
技術(shù)領(lǐng)域:
,特別涉及一種基于FA的表項(xiàng)壓縮方法及裝置、表項(xiàng)匹配方法及裝置。
背景技術(shù):
:RE(RegularExpression,正則表達(dá)式)描述了一種字符串匹配的模式,可以用來檢查一個(gè)字符串是否含有某種子串,并將匹配的子串進(jìn)行替換,或者從某個(gè)字符串中取出符合匹配條件的子串等。RE是由普通字符(例如字符a到z)以及特殊字符(例如元字符*、/等)組成的文字模式,通過RE可以將某個(gè)文字模式與所搜索的字符串進(jìn)行匹配,是字符串模式匹配中最常用的表達(dá)方式。RE—般只用來表達(dá)一個(gè)模式,需要轉(zhuǎn)化為FA(FiniteAutomata,有限自動(dòng)機(jī))才能用于計(jì)算機(jī)執(zhí)行高效的模式匹配。FA由若干狀態(tài)組成,每種狀態(tài)在接收到字符后會(huì)遷移到其它狀態(tài)。每個(gè)FA都有若干起始狀態(tài)和接受狀態(tài),在FA進(jìn)行匹配時(shí),首先從起始態(tài)開始,順序?qū)⒛繕?biāo)字符串的字符作為當(dāng)前狀態(tài)的輸入,不斷循環(huán)上述過程,直到到達(dá)接受狀態(tài)或者目標(biāo)字符串匹配完成,如果最終狀態(tài)為接受狀態(tài)則認(rèn)為匹配成功,否則匹配不成功。以RE"(time\x20|now\t)\d{3,5}s,,為例,其中"\x20,,是空格的ASCII值的16進(jìn)制表示,"\d"表示任意數(shù)字0至9,"\t"表示制表符,T表示邏輯"或","time\x20"表示一個(gè)連續(xù)的字符串,"{3,5}"表示數(shù)字的重復(fù)個(gè)數(shù)最少三個(gè)最多五個(gè)。該RE用于匹配一個(gè)字符串是不是關(guān)鍵字"time",后跟一個(gè)空格,或者關(guān)鍵字"now",后跟一個(gè)制表符,然后為一個(gè)3至5的數(shù)字,最后為時(shí)間單位s(秒)。該RE轉(zhuǎn)化后的FA狀態(tài)遷移結(jié)構(gòu)示意圖如圖1所示每一個(gè)圓圏表示一種狀態(tài),圓圈中的數(shù)字表示狀態(tài)的索引。圖1中從起始態(tài)"0"開始,每次處理一個(gè)字符,每輸入一個(gè)有效字符(圖中兩個(gè)圓圏表示的狀態(tài)之間的箭頭線上標(biāo)注的字符)則進(jìn)入下一個(gè)狀態(tài)。匹配時(shí),當(dāng)輸入的字符不是該狀態(tài)能夠接受的,則返回起始狀,態(tài)"0"。在狀態(tài)"11"和狀態(tài)"12",如果輸入的字符為"\d"則進(jìn)入對應(yīng)的下一個(gè)狀態(tài)"12"或狀態(tài)"13",如果輸入的字符為"s",則進(jìn)入狀態(tài)"14",狀態(tài)"14"為4妻受態(tài),用兩個(gè)同心圓表示,當(dāng)匹配到該4妄受態(tài)時(shí):說明匹配成功,如果目標(biāo)字符串處理完后仍然沒有到達(dá)接受態(tài),則匹配失敗。上述FA對應(yīng)的二維存儲(chǔ)結(jié)構(gòu)如下表1所示表1<table>tableseeoriginaldocumentpage7</column></row><table>通常FA狀態(tài)表中每一列代表一個(gè)ASCII字符,所以表1應(yīng)該為256列,但是為了描述和顯示方便,將沒有出現(xiàn)在RE"(time\x20|now\t)\d{3,5}s,,中的字符,用"其它"列統(tǒng)一表示,該列中的單元格全部為"0",相應(yīng)的,圖1中的每一個(gè)狀態(tài)對應(yīng)上表l中的一行,其中空格均為"0"。結(jié)令上述表l對目標(biāo)字符串執(zhí)行匹配時(shí),將初始狀態(tài)賦值為"0",從初始狀態(tài)開始順序讀取目標(biāo)字符,以狀態(tài)編號為行索引、以字符為列索引找到目標(biāo)狀態(tài)值,并賦值給當(dāng)前狀態(tài),然后判斷該狀態(tài)所在行的"接受態(tài)"一列是否為1,如果是,則匹配成功退出,如果目標(biāo)字符串輸入完成后仍然沒有匹配成功,則匹配失敗。發(fā)明人在實(shí)踐中發(fā)現(xiàn),如正則表達(dá)式"(time\x20|now\t)\d{3,5}s,,,其中字符串"time\x20,,對應(yīng)狀態(tài)0到狀態(tài)4,上述五個(gè)狀態(tài)具有相似性,即輸入一個(gè)有效字符后則遷移到下一個(gè)狀態(tài),否則遷移到狀態(tài)0;同理,"\d{3,5},,對應(yīng)狀態(tài)8到狀態(tài)12,上述五個(gè)狀態(tài)也具有相似性,即輸入數(shù)字則遷移到下一個(gè)狀態(tài),且在滿足數(shù)字個(gè)數(shù)的狀態(tài)輸入"s"時(shí)都遷移到狀態(tài)14,否則遷移到狀態(tài)0。因此對于如表l所示的二維表存儲(chǔ)結(jié)構(gòu),當(dāng)對應(yīng)的RE中連續(xù)字符的遷移狀態(tài)相似時(shí),將使該存儲(chǔ)結(jié)構(gòu)產(chǎn)生大量冗余,特別當(dāng)RE表示的遷移狀態(tài)越多時(shí),產(chǎn)生的冗余與占用的內(nèi)存空間成正比增加。因此,在表l所示的二維存儲(chǔ)結(jié)構(gòu)中,當(dāng)狀態(tài)個(gè)數(shù)小于256個(gè)時(shí),每個(gè)單元格里的狀態(tài)索引可以使用一個(gè)字節(jié)表示,每行需要的存儲(chǔ)空間為256個(gè)字節(jié);當(dāng)狀態(tài)個(gè)數(shù)在256和65536之間時(shí),每個(gè)單元格里的狀態(tài)索引需要使用二個(gè)字節(jié)表示,每行需要的存儲(chǔ)空間為512字節(jié),因此狀態(tài)個(gè)數(shù)越多,每個(gè)單元格占用的字節(jié)數(shù)也就越多,相應(yīng)占用的內(nèi)存空間也越大。
發(fā)明內(nèi)容本發(fā)明實(shí)施例的目的在于提供一種基于FA的表項(xiàng)壓縮方法及裝置、表項(xiàng)匹配方法及裝置,以減少現(xiàn)有FA的二維結(jié)構(gòu)表中的冗余表項(xiàng),減少二維結(jié)構(gòu)表對內(nèi)存空間的占用。為實(shí)現(xiàn)本發(fā)明實(shí)施例的目的,本發(fā)明實(shí)施例提供如下技術(shù)方案一種基于FA的表項(xiàng)壓縮方法,包括分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。一種基于FA的表項(xiàng)壓縮裝置,包括分析單元,用于分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;合并單元,用于將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。一種基于FA的表項(xiàng)匹配方法,所述表項(xiàng)為按照權(quán)利要求1所述的表項(xiàng)壓縮方法生成的二維結(jié)構(gòu)表,包括在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);判斷當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。一種基于FA的表項(xiàng)匹配裝置,所述表項(xiàng)為按照權(quán)利要求1所述的表項(xiàng)壓縮方法生成的二維結(jié)構(gòu)表,包括存儲(chǔ)單元,用于存儲(chǔ)所述二維結(jié)構(gòu)表;查找單元,用于在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);遷移單元,用于判斷從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。由以上本發(fā)明實(shí)施例提供的技術(shù)方案可見,本發(fā)明實(shí)施例分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性,然后將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。應(yīng)用本發(fā)明表項(xiàng)壓縮方法的實(shí)施例,通過將原二維結(jié)構(gòu)表中的相似狀態(tài)合并為一個(gè)狀態(tài),即壓縮了正則表達(dá)式中連續(xù)字符的相似遷移狀態(tài),減少了存儲(chǔ)結(jié)構(gòu)中的由于相似狀態(tài)而產(chǎn)生的大量冗余,節(jié)約了內(nèi)存空間;相應(yīng)地,當(dāng)原有二維結(jié)構(gòu)表中的狀態(tài)個(gè)數(shù)較多時(shí),由于通過壓縮表項(xiàng)使得狀態(tài)總數(shù)下降,因此單元格的狀態(tài)索引需要的字節(jié)數(shù)也相應(yīng)下降,從而降低了內(nèi)存消耗。圖1為現(xiàn)有FA的狀態(tài)遷移結(jié)構(gòu)示意圖;圖2為本發(fā)明基于FA的表項(xiàng)壓縮方法的第一實(shí)施例流程圖;圖3為本發(fā)明基于FA的表項(xiàng)壓縮方法的第二實(shí)施例流程圖;圖4為本發(fā)明FA的狀態(tài)遷移結(jié)構(gòu)示意圖;圖5為本發(fā)明基于FA的表項(xiàng)匹配方法的第一實(shí)施例流程圖;圖6為本發(fā)明基于FA的表項(xiàng)匹配方法的第二實(shí)施例流程圖;圖7為本發(fā)明基于FA的表項(xiàng)壓縮裝置的第一實(shí)施例框圖;圖8為本發(fā)明基于FA的表項(xiàng)壓縮裝置的第二實(shí)施例框圖;圖9為本發(fā)明基于FA的表項(xiàng)匹配裝置的第一實(shí)施例框圖;圖10為本發(fā)明基于FA的表項(xiàng)匹配裝置的第二實(shí)施例框圖。具體實(shí)施例方式本發(fā)明實(shí)施例提供了一種基于FA的表項(xiàng)壓縮方法及裝置、表項(xiàng)匹配方法及裝置,分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性,將原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。為了使本
技術(shù)領(lǐng)域:
的人員更好地理解本發(fā)明實(shí)施例提供的技術(shù)方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明實(shí)施例提供的技術(shù)方案作進(jìn)一步的詳細(xì)說明。本發(fā)明基于FA的表項(xiàng)生成方法的第一實(shí)施例流程如圖2所示步驟201:分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性。具體的,分析所有狀態(tài)的遷移特性后為每個(gè)狀態(tài)構(gòu)造引用集合,該引用集合中包含能夠遷移到每個(gè)狀態(tài)的所有狀態(tài)。步驟202:將原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。其中,具有統(tǒng)一遷移特性的連續(xù)狀態(tài)包括所述連續(xù)狀態(tài)均為輸入一個(gè)字符后遷移至下一個(gè)狀態(tài),且所述連續(xù)狀態(tài)的引用集合中有唯一的狀態(tài);或者所述連續(xù)狀態(tài)均為滿足輸入次數(shù)的范圍時(shí)遷移至下一個(gè)狀態(tài),滿足所述輸入范圍的最小值至最大值之間的狀態(tài)均遷移至同一過渡狀態(tài),且所述連續(xù)狀態(tài)的引用集合中有唯一的狀態(tài)。具體的,附加控制屬性可以包括以下兩種所述具有統(tǒng)一遷移特性的連續(xù)狀態(tài)對應(yīng)的字符串的首字符及后跟字符串,及所述連續(xù)狀態(tài)10與所述對應(yīng)的字符串不符時(shí)的失效狀態(tài);或者所述具有統(tǒng)一遷移特性的連續(xù)狀態(tài)對應(yīng)的當(dāng)前字符集、所述字符集的、最小輸入個(gè)數(shù)及最大輸入個(gè)數(shù)、過渡字符和過渡遷移狀態(tài)、及所述連續(xù)狀態(tài)與所述對應(yīng)的字符串不符時(shí)的失效狀態(tài)。本發(fā)明基于FA的表項(xiàng)生成方法的第二實(shí)施例流程如圖3所示,該實(shí)施例示出了對原始二維結(jié)構(gòu)表進(jìn)行壓縮的詳細(xì)過程步驟301:分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性。步驟302:為原始二維結(jié)構(gòu)表中的每個(gè)狀態(tài)構(gòu)造引用集合。步驟303:順序掃描原始二維結(jié)構(gòu)表。步驟304:判斷當(dāng)前連續(xù)狀態(tài)是否具有統(tǒng)一的遷移特性,若是,則執(zhí)行步驟305;否則,執(zhí)行步驟307。步驟305:為具有統(tǒng)一遷移特性的連續(xù)狀態(tài)分配相同的狀態(tài)索引,并增加附加控制屬性。步驟306:將該連續(xù)狀態(tài)的首狀態(tài)及其對應(yīng)的狀態(tài)索引、附加控制屬性按照狀態(tài)索引的順序轉(zhuǎn)換到新的二維結(jié)構(gòu)表中,執(zhí)行步驟309。步驟307:為不具有統(tǒng)一遷移特性的狀態(tài)重新分配狀態(tài)索引。步驟308:將上述狀態(tài)按照狀態(tài)索引的順序轉(zhuǎn)換到新的二維結(jié)構(gòu)表中。步驟309步驟判斷是否掃描完原始二維結(jié)構(gòu)表,若是,則執(zhí)行步驟310;否則,返回步驟303。步驟310:返回壓縮完成消息并刪除原始二維結(jié)構(gòu)表,結(jié)束當(dāng)前流程。結(jié)合上述本發(fā)明表項(xiàng)壓縮方法的實(shí)施例,仍然以正則表達(dá)式"(time\x20|now\t)\d{3,5}s,,為例,描述基于FA的二維數(shù)據(jù)結(jié)構(gòu)的壓縮過程對應(yīng)正則表達(dá)式"(time\x20|now\t)\d{3,5}s,,的原始二維存儲(chǔ)結(jié)構(gòu)如表1所示,對表1中的每個(gè)狀態(tài),將能夠遷移到該狀態(tài)所有狀態(tài)進(jìn)行記錄,作為該狀態(tài)的引用集合,例如表1中能夠遷移到狀態(tài)3的狀態(tài)為狀態(tài)2,因此狀態(tài)3的引用集合中記錄了狀態(tài)2;能夠遷移到狀態(tài)ii8的狀態(tài)為狀態(tài)4和狀態(tài)7,因此狀態(tài)8的引用集合中記錄了狀態(tài)4和狀態(tài)7;又.如表1中能夠遷移到狀態(tài)0的狀態(tài)為狀態(tài)0至狀態(tài)14,因此狀態(tài)0的引用集合中記錄了狀態(tài)0至狀態(tài)14。開始掃描二維存儲(chǔ)結(jié)構(gòu)表1,對于"time\x20",從狀態(tài)0開始至狀態(tài)4的每個(gè)狀態(tài),均為輸入一個(gè)符合要求的字母后遷移到下一個(gè)狀態(tài),而且對于每個(gè)狀態(tài)的引用集合,對應(yīng)了唯一的引用狀態(tài);同樣的,對于"now\t,,,從狀態(tài)0以及狀態(tài)5到狀態(tài)7的每個(gè)狀態(tài),也為輸入一個(gè)符合要求的字母后遷移到下一個(gè)狀態(tài),而且對于每個(gè)狀態(tài)的引用集合,也對應(yīng)了唯一的引用狀態(tài),因此對上述具有相似遷移特性的狀態(tài)用一個(gè)統(tǒng)一的新索引重新標(biāo)識(shí)。由于初始狀態(tài)均為狀態(tài)0,因此對應(yīng)原有的狀態(tài)1至狀態(tài)4,以及狀態(tài)5至狀態(tài)7,重新編號后的新索引均為"0"。然后為新索引0設(shè)置附加控制屬性,該附加控制屬性的格式可以為F(當(dāng)前字符后跟字符串),這樣的格式可以為多組,例如對應(yīng)于"time\x20|now\t"則有兩組,即為F(t:ime\x20,n:ow\t),進(jìn)一步在附加控制屬性中添加失效狀態(tài)屬性,本實(shí)施例中的失效狀態(tài)為狀態(tài)"0",因此最終的附加控制屬性為"O,F(xiàn)(t:ime\x20,n:owU)"。對于"\d{3,5},,,從狀態(tài)8開始可能有三至五個(gè)狀態(tài),均為輸入任意數(shù)字后遷移到下一個(gè)狀態(tài),并且從狀態(tài)11開始至狀態(tài)13均有相同的狀態(tài)遷移,即均可能遷移到狀態(tài)14,而且對于每個(gè)狀態(tài)的引用集合,對應(yīng)了唯一的引用狀態(tài),因此對上述具有相似遷移特性的狀態(tài)也用一個(gè)統(tǒng)一的新索引重新標(biāo)識(shí)。由于正則表達(dá)式前半部分"time\x20|now\t,,的新索引為"0",因此對應(yīng)原有的狀態(tài)8至狀態(tài)13,順序編號后的新索引均為"1"。然后為"\d{3,5},,設(shè)置附加控制屬性,該附加屬性的格式可以為M(當(dāng)前字符集:最小個(gè)數(shù)-最大個(gè)數(shù),過渡字符過渡遷移),也可能有多對。對應(yīng)本發(fā)明實(shí)施例,加入了失效狀態(tài)的最終附加控制屬性即為"O,M(\d:3-5,s:3)"。對于不符合合并要求的狀態(tài)13和最終狀態(tài)14,則直接為其分配順序編號的新索引"2"和"3"。經(jīng)過上述合并、重新分配新索引、以及為合并后的新索引增加附加控制屬性的操作后,形成的二維中間狀態(tài)表如下表2所示表2<table>tableseeoriginaldocumentpage13</column></row><table>由于上述中間狀態(tài)表2中包含了原二維結(jié)構(gòu)表中的遷移狀態(tài)信息,仍然占用了較多內(nèi)存,因此對表2再次掃描后,將新的狀態(tài)索引及附加控制屬性轉(zhuǎn)換到新的二維結(jié)構(gòu)表中,即將原有的遷移狀態(tài)索引替換為新的遷移狀態(tài)索引,最終生成的壓縮后的二維結(jié)構(gòu)表如下表3所示:表3<table>tableseeoriginaldocumentpage14</column></row><table>對應(yīng)上述壓縮后的二維結(jié)構(gòu)表3,新的FA的狀態(tài)遷移示意圖如圖4所示從起始狀態(tài)0開始,可以根據(jù)合并后的狀態(tài)對應(yīng)的附加控制屬性處理目標(biāo)字符中的連續(xù)字符串,而不是僅處理一個(gè)字符。即當(dāng)順序讀取的當(dāng)前目標(biāo)字符串滿足附加控制屬性F(t:imeVx20,n:owU)時(shí),遷移到狀態(tài)1,當(dāng)滿足附加控制屬性MQd:3-5,s:3)時(shí),從狀態(tài)1遷移到狀態(tài)2,當(dāng)讀取到字符"s"時(shí),則從狀態(tài)2遷移到接受狀態(tài)3。由此可見,應(yīng)用本發(fā)明方法實(shí)施例的壓縮表項(xiàng)僅包含4個(gè)遷移狀態(tài),與現(xiàn)有技術(shù)中的15個(gè)遷移狀態(tài)相比,極大地降低了存儲(chǔ)空間。與本發(fā)明基于FA的表項(xiàng)壓縮方法的實(shí)施例相對應(yīng),本發(fā)明還提供了基于FA的表項(xiàng)匹配方法的實(shí)施例。本發(fā)明基于FA的表項(xiàng)匹配方法的第一實(shí)施例流程如圖5所示步驟501:在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找壓縮表項(xiàng),并記錄目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài)。步驟502:當(dāng)從該目標(biāo)字符開始的連續(xù)字符串符合該目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從當(dāng)前狀態(tài)遷移到所述下一個(gè)狀態(tài)。本發(fā)明基于FA的表項(xiàng)匹配方法的第二實(shí)施例流程如圖6所示,該實(shí)施例示出了通過壓縮后的二維結(jié)構(gòu)表進(jìn)行正則表達(dá)式匹配的詳細(xì)過程步驟601:在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找壓縮表項(xiàng)。步驟602:記錄該目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài)。步驟603:判斷該目標(biāo)字符對應(yīng)的附加控制屬性是否為空,若否,則執(zhí)行步驟604;若是,則執(zhí)行步驟605。步驟604:判斷從該目標(biāo)字符開始的連續(xù)字辟串是否符合對應(yīng)的附加控制屬性,若是,則執(zhí)行步驟605;否則,執(zhí)行步驟608。步驟605:從當(dāng)前狀態(tài)遷移至記錄的下一個(gè)狀態(tài)。步驟606:判斷下一個(gè)狀態(tài)是否為接受狀態(tài),若是,則執(zhí)行步驟607;否則,返回步驟601。步驟607:返回匹配成功,結(jié)束當(dāng)前流程。步驟608:乂人當(dāng)前狀態(tài)遷移至失效狀態(tài),返回步驟601。仍然以匹配正則表達(dá)式"(time\x20|now\t)\d{3,5}s,,為例,假設(shè)目標(biāo)字符串為"time2468s",則應(yīng)用上述壓縮后的二維結(jié)構(gòu)表3進(jìn)行匹配的過牙呈i口下從初始狀態(tài)O開始,讀入目標(biāo)字符串的第一個(gè)字符為"t",則根據(jù)表3查找"t"對應(yīng)的下一個(gè)狀態(tài)為1,記錄狀態(tài)1,同時(shí)查詢狀態(tài)0時(shí)的附加控制屬性為"0,F(xiàn)(t:ime\x20,n:ow\t),,,則說明對當(dāng)前字符"t"有后跟字符串的要求,此時(shí)將該附加控制屬性中的后跟字符串與目標(biāo)字符串中字符"t,,后的等長字符串進(jìn)行比較,由于上述兩個(gè)字符串的比較結(jié)果相等,因此把已經(jīng)記錄的狀態(tài)l作為當(dāng)前狀態(tài)。繼續(xù)讀取"time"后的第一個(gè)字符為"2",根據(jù)表3查找"2"對應(yīng)的下一個(gè)狀態(tài)為2,記錄狀態(tài)2,同時(shí)查詢狀態(tài)為1時(shí)的附加控制屬性為"0,M(\d:3-5,s:3),,,則說明對數(shù)字0-9有重復(fù)3至5次的要求,此時(shí)循環(huán)讀入目標(biāo)字符串中字符"2"后的字符,并將計(jì)數(shù)器相應(yīng)加1,由于有連續(xù)的三個(gè)字符均為數(shù)字,因此滿足附加控制屬性中關(guān)于最小值的要求,繼續(xù)讀入第4個(gè)字符"8",計(jì)數(shù)器加l后的當(dāng)前值為4,此時(shí)還未超過附加控制屬性中關(guān)于最大值的要求,保持當(dāng)前狀態(tài)不變。繼續(xù)讀入字符"s",根據(jù)當(dāng)前狀態(tài)1的附加控制屬性,"s"是過渡字符,其對應(yīng)的下一個(gè)狀態(tài)為3,把狀態(tài)3作為當(dāng)前狀態(tài),查找表3中狀態(tài)3對應(yīng)的接受態(tài)為"1",說明對目標(biāo)字符串的匹配已經(jīng)完成,返回匹配成功消息。需要說明的是,上述匹配過程以匹配成功為例,當(dāng)目標(biāo)字符串匹配失敗時(shí),則遷移到失效狀態(tài)O。與本發(fā)明基于FA的表項(xiàng)壓縮方法的實(shí)施例相對應(yīng),本發(fā)明還提供了基于FA的表.項(xiàng)壓縮裝置的實(shí)施例。本發(fā)明表項(xiàng)壓縮裝置的第一實(shí)施例框圖如圖7所示,該裝置包括分析單元710和合并單元720。其中,分析單元710用于分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;合并單元720用于將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。本發(fā)明表項(xiàng)壓縮裝置的第二實(shí)施例框圖如圖8所示該裝置包括分析單元810、構(gòu)造單元820、合并單元830和刪除單元840。其中,分析單元810用于分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;構(gòu)造單元820用于為所述原始二維結(jié)構(gòu)表中的每個(gè)狀態(tài)構(gòu)造引用集合,所述引用集合中包含能夠遷移到所述每個(gè)狀態(tài)的所有狀態(tài);合并單元830用于將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并;刪除單元840用于刪除所述原始二維結(jié)構(gòu)表。其中,合并單元830包括掃描單元831,用于順序掃描所述原始二維結(jié)構(gòu)表;分配單元832,用于為具有統(tǒng)一遷移特性的連續(xù)狀態(tài)分配相同的狀態(tài)索引,并為所述連續(xù)狀態(tài)增加附加控制屬性,所述附加控制屬性中包含所述遷移特性的信息,以及為不具有統(tǒng)一遷移特性的狀態(tài)重新分配狀態(tài)索引;轉(zhuǎn)換單元833,用于將所述連續(xù)狀態(tài)的首狀態(tài)及其對應(yīng)的狀態(tài)索引、附加控制屬性轉(zhuǎn)換到新的二維結(jié)構(gòu)表,所述新的二維結(jié)構(gòu)表中的狀態(tài)按照所述狀態(tài)索引的順序排列,并將所述不具有統(tǒng)一遷移特性的狀態(tài)按照所述狀態(tài)索引的順序轉(zhuǎn)換到所述新的二維結(jié)構(gòu)表中。與本發(fā)明基于FA的表項(xiàng)匹配方法的實(shí)施例相對應(yīng),本發(fā)明還提供了基于FA的表項(xiàng)匹配裝置的實(shí)施例。本發(fā)明表項(xiàng)匹配裝置的第一實(shí)施例框圖如圖9所示,該裝置包括存儲(chǔ)單元910、查找單元920和遷移單元930。其中,存儲(chǔ)單元910用于存儲(chǔ)壓縮后的二維結(jié)構(gòu)表;查找單元920用于在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);遷移單元930用于判斷從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。本發(fā)明表項(xiàng)匹配裝置的第二實(shí)施例框圖如圖10所示,該裝置包括存儲(chǔ)單元1010、查找單元1020、遷移單元1030和返回單元1040。其中,存儲(chǔ)單元1010用于存儲(chǔ)壓縮后的二維結(jié)構(gòu)表;查找單元1020用于在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);遷移單元1030用于判斷從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài);當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串不符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至失效狀態(tài);當(dāng)所述目標(biāo)字符對應(yīng)的附加控制屬性為空時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài);返回單元1040用于當(dāng)所述下一個(gè)狀態(tài)為4^收狀態(tài)時(shí),返回匹配成功。通過本發(fā)明實(shí)施例的描述可知,應(yīng)用本發(fā)明表項(xiàng)壓縮方法的實(shí)施例,通過將原二維結(jié)構(gòu)表中的相似狀態(tài)合并為一個(gè)狀態(tài),即壓縮了正則表達(dá)式中連續(xù)字符的相似遷移狀態(tài),減少了存儲(chǔ)結(jié)構(gòu)中的由于相似狀態(tài)而產(chǎn)生的大量冗余,節(jié)約了內(nèi)存空間;相應(yīng)地,當(dāng)原有二維結(jié)構(gòu)表中的狀態(tài)個(gè)數(shù)較多時(shí),由于通過壓縮表項(xiàng)使得狀態(tài)總數(shù)下降,因此單元格的狀態(tài)索引需要的字節(jié)數(shù)也相應(yīng)下降,從而降低了內(nèi)存消耗。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行表項(xiàng)壓縮時(shí),包括如下步驟分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。該程序在執(zhí)行表項(xiàng)匹配時(shí),包括如下步驟在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述表項(xiàng),并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);判斷當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。所述的存儲(chǔ)介質(zhì),如17ROM/RAM、磁碟、光盤等。雖然通過實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。權(quán)利要求1、一種基于FA的表項(xiàng)壓縮方法,其特征在于,包括分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。2、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述分析所有狀態(tài)的遷移特性后還包括為所述原始二維結(jié)構(gòu)表中的每個(gè)狀態(tài)構(gòu)造引用集合,所述引用集合中包含能夠遷移到所述每個(gè)狀態(tài)的所有狀態(tài)。3、根據(jù)權(quán)利要求2所述的方法,其特征在于,按照下述步驟,將具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并順序掃描所述原始二維結(jié)構(gòu)表;為具有統(tǒng)一遷移特性的連續(xù)狀態(tài)分配相同的狀態(tài)索引,并為所述連續(xù)狀態(tài)增加附加控制屬性,所述附加控制屬性中包含所述遷移特性的信息;將所述連續(xù)狀態(tài)的首狀態(tài)及其對應(yīng)的狀態(tài)索引、附加控制屬性轉(zhuǎn)換到新的二維結(jié)構(gòu)表,所述新的二維結(jié)構(gòu)表中的狀態(tài)按照所述狀態(tài)索引的順序排列。4、根據(jù)權(quán)利要求3所述的方法,其特征在于,進(jìn)一步包括為不具有統(tǒng)一遷移特性的狀態(tài)重新分配狀態(tài)索引;將所述狀態(tài)按照所述狀態(tài)索引的順序轉(zhuǎn)換到所述新的二維結(jié)構(gòu)表中。5、根據(jù)權(quán)利要求4所述的方法,其特征在于,進(jìn)一步包括刪除所述原始二維結(jié)構(gòu)表。6、根據(jù)權(quán)利要求2至5任意一項(xiàng)所述的方法,其特征在于,所述具有統(tǒng)一遷移特性的連續(xù)狀態(tài)包括所述連續(xù)狀態(tài)均為輸入一個(gè)字符后遷移至下一個(gè)狀態(tài),且所述連續(xù)狀態(tài)的引用集合中有唯一的狀態(tài);或所述連續(xù)狀態(tài)均為滿足輸入次數(shù)的范圍時(shí)遷移至下一個(gè)狀態(tài),滿足所述輸入范圍的最小值至最大至之間的狀態(tài)均遷移至同一過渡狀2態(tài),且所述連續(xù)狀態(tài)的引用集合中有唯一的狀態(tài)。7、根據(jù)權(quán)利要求3至5任意一-貞所述的方法,其特征在于,所述附加控制屬性包括所述具有統(tǒng)一遷移特性的連續(xù)狀態(tài)對應(yīng)的字符串的首字符及后跟字符串,及所述連續(xù)狀態(tài)與所述對應(yīng)的字符串不符時(shí)的失效狀態(tài);或所述具有統(tǒng)一遷移特性的連續(xù)狀態(tài)對應(yīng)的當(dāng)前字符集、所述字符集的最小輸入個(gè)數(shù)及最大輸入個(gè)數(shù)、過渡字符和過渡遷移狀態(tài)、及所述連續(xù)狀態(tài)與所述對應(yīng)的字符串不符時(shí)的失效狀態(tài)。8、一種基于FA的表項(xiàng)壓縮裝置,其特征在于,包括分析單元,用于分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;合并單元,用于將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。9、根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括構(gòu)造單元,用于為所述原始二維結(jié)構(gòu)表中的每個(gè)狀態(tài)構(gòu)造引用集合,所述引用集合中包含能夠遷移到所述每個(gè)狀態(tài)的所有狀態(tài)。10、根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述合并單元包括掃描單元,用于順序掃描所述原始二維結(jié)構(gòu)表;分配單元,用于為具有統(tǒng)一遷移特性的連續(xù)狀態(tài)分配相同的狀態(tài)索引,并為所述連續(xù)狀態(tài)增加附加控制屬性,所述附加控制屬性中包含所述遷移特性的信息;轉(zhuǎn)換單元,用于將所述連續(xù)狀態(tài)的首狀態(tài)及其對應(yīng)的狀態(tài)索引、附加控制屬性轉(zhuǎn)換到新的二維結(jié)構(gòu)表,所述新的二維結(jié)構(gòu)表中的狀態(tài)按照所述狀態(tài)索引的順序排列。11、根據(jù)權(quán)利要求IO所述的裝置,其特征在于,所述分配單元進(jìn)一步用于,為不具有統(tǒng)一遷移特性的狀態(tài)重新分配狀態(tài)索引;所述轉(zhuǎn)換單元進(jìn)一步用于將所述狀態(tài)按照所述狀態(tài)索引的順序轉(zhuǎn)換到所述新的二維結(jié)構(gòu)表中。12、根據(jù)權(quán)利要求10所述的裝置,其特征在于,進(jìn)一步包括刪除單元,用于刪除所述原始二維結(jié)構(gòu)表。13、一種基于FA的表項(xiàng)匹配方法,其特征在于,所述表項(xiàng)為按照權(quán)利要求1所述的表項(xiàng)壓縮方法生成的二維結(jié)構(gòu)表,包括在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);判斷當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。14、根據(jù)權(quán)利要求13所述的方法,其特征在于,進(jìn)一步包括當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串不符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至失效狀態(tài)。15、根據(jù)權(quán)利要求13所述的方法,其特征在于,進(jìn)一步包括當(dāng)所述目標(biāo)字符對應(yīng)的附加控制屬性為空時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。16、根據(jù)權(quán)利要求13所述的方法,其特征在于,進(jìn)一步包括當(dāng)所述下一個(gè)狀態(tài)為接受狀態(tài)時(shí),返回匹配成功。17、一種基于FA的表項(xiàng)匹配裝置,其特征在于,所述表項(xiàng)為按照權(quán)利要求1所述的表項(xiàng)壓縮方法生成的二維結(jié)構(gòu)表,包括存儲(chǔ)單元,用于存儲(chǔ)所述二維結(jié)構(gòu)表;查找單元,用于在當(dāng)前狀態(tài)根據(jù)讀取的目標(biāo)字符查找所述二維結(jié)構(gòu)表,并記錄所述目標(biāo)字符對應(yīng)的下一個(gè)狀態(tài);遷移單元,用于判斷從所述目標(biāo)字符開始的連續(xù)字符串符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。18、根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述遷移單元進(jìn)一步用于,當(dāng)從所述目標(biāo)字符開始的連續(xù)字符串不符合所述目標(biāo)字符對應(yīng)的附加控制屬性時(shí),從所述當(dāng)前狀態(tài)遷移至失效狀態(tài);當(dāng)所述目標(biāo)字符對應(yīng)的附加控制屬性為空時(shí),從所述當(dāng)前狀態(tài)遷移至所述下一個(gè)狀態(tài)。19、根據(jù)權(quán)利要求17所述的裝置,其特征在于,進(jìn)一步包括返回單元,用于當(dāng)所述下一個(gè)狀態(tài)為接收狀態(tài)時(shí),返回匹配成功。全文摘要本發(fā)明公開了一種基于FA的表項(xiàng)壓縮方法,包括分析原始二維結(jié)構(gòu)表中所有狀態(tài)的遷移特性;將所述原始二維結(jié)構(gòu)表中具有統(tǒng)一遷移特性的連續(xù)狀態(tài)進(jìn)行合并。本發(fā)明還公開了一種基于FA的表項(xiàng)匹配方法、表項(xiàng)壓縮裝置及表項(xiàng)匹配裝置。應(yīng)用本發(fā)明表項(xiàng)壓縮方法的實(shí)施例,通過將原二維結(jié)構(gòu)表中的相似狀態(tài)合并為一個(gè)狀態(tài),即壓縮了正則表達(dá)式中連續(xù)字符的相似遷移狀態(tài),減少了存儲(chǔ)結(jié)構(gòu)中的由于相似狀態(tài)而產(chǎn)生的大量冗余,節(jié)約了內(nèi)存空間;相應(yīng)地,當(dāng)原有二維結(jié)構(gòu)表中的狀態(tài)個(gè)數(shù)較多時(shí),由于通過壓縮表項(xiàng)使得狀態(tài)總數(shù)下降,因此單元格的狀態(tài)索引需要的字節(jié)數(shù)也相應(yīng)下降,從而降低了內(nèi)存消耗。文檔編號G06F17/30GK101499065SQ200810006079公開日2009年8月5日申請日期2008年2月1日優(yōu)先權(quán)日2008年2月1日發(fā)明者李繼軍,趙玉超申請人:華為技術(shù)有限公司