• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于正則表達(dá)式的數(shù)據(jù)處理應(yīng)用

      2010-09-08 02:13:12譚玉玲
      關(guān)鍵詞:模式匹配字符串觸發(fā)器

      譚玉玲

      (羅定職業(yè)技術(shù)學(xué)院電子信息工程系,廣東羅定 527200)

      隨著數(shù)據(jù)庫(kù)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)量越來(lái)越大,數(shù)據(jù)處理工作也越來(lái)越復(fù)雜。數(shù)據(jù)庫(kù)中的操作大都是通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)提供的標(biāo)準(zhǔn)SQL語(yǔ)句來(lái)實(shí)現(xiàn)的。為了提高數(shù)據(jù)處理效率,人們提出了很多優(yōu)化方法,如建立視圖,減少LIKE條件的使用等[1-3]。這些優(yōu)化方法都是建立在標(biāo)準(zhǔn)SQL語(yǔ)句基礎(chǔ)之上的。而標(biāo)準(zhǔn)SQL語(yǔ)句在執(zhí)行復(fù)雜的操作時(shí),本身就存在著一些不足。例如,要從好友聯(lián)系表Table中查詢滿足條件“QQ號(hào)字段中以10、11、12開(kāi)頭,以8結(jié)尾”的所有好友記錄,則可以使用如下的標(biāo)準(zhǔn)SQL語(yǔ)句進(jìn)行查詢:

      上述SQL語(yǔ)句采用謂詞LIKE的方式來(lái)進(jìn)行模式匹配,檢索條件明確,運(yùn)行后可以得到正確的結(jié)果,但是語(yǔ)句卻顯得有點(diǎn)冗長(zhǎng)。語(yǔ)句中的百分號(hào)(%)可代表任意多個(gè)字符。如果要對(duì)QQ號(hào)字段的長(zhǎng)度進(jìn)行限制,就勢(shì)必會(huì)增加SQL語(yǔ)句的復(fù)雜度。如果僅僅使用標(biāo)準(zhǔn)的SQL語(yǔ)句執(zhí)行查詢操作,不僅難以編寫復(fù)雜的查詢語(yǔ)句,還可能會(huì)降低程序的查詢效率。更為糟糕的是,一旦SQL語(yǔ)句出錯(cuò),難以進(jìn)行排查和改錯(cuò)。

      實(shí)際上,對(duì)于模式匹配,正則表達(dá)式提供了更高效且更佳的解決方案。運(yùn)用正則表達(dá)式強(qiáng)大的模式匹配功能,可以通過(guò)簡(jiǎn)單的語(yǔ)句實(shí)現(xiàn)匹配工作,完成復(fù)雜的數(shù)據(jù)處理。

      1 正則表達(dá)式的優(yōu)點(diǎn)

      正則表達(dá)式是一種源于Unix的強(qiáng)大的數(shù)據(jù)檢索技術(shù),它是由普通字符(如a~z之間的字母)和特殊字符(稱為“元字符”)組成,不僅允許用戶對(duì)檢索條件有更靈活的控制,而且對(duì)電話號(hào)碼、email地址和文件名等規(guī)范格式也非常有用[4-6]。正則表達(dá)式是定義復(fù)雜查詢的一個(gè)強(qiáng)有力工具,它定義一個(gè)字符串的規(guī)則,使用了某些特殊的語(yǔ)法結(jié)構(gòu),能夠匹配更多的字符串。

      熟練運(yùn)用正則表達(dá)式的特殊字符,可以對(duì)字符串執(zhí)行許多復(fù)雜而高級(jí)的操作,可以實(shí)現(xiàn):

      (1)測(cè)試字符串的模式。如可以對(duì)用戶輸入的字符串進(jìn)行測(cè)試,看該字符串是否為一串?dāng)?shù)字。

      (2)查找。根據(jù)模式匹配從字符串中提取子字符串,可以用來(lái)在文本或輸入字段中查找特定文字,這也是最常見(jiàn)的操作。

      (3)替換文本。在文檔中使用一個(gè)正則表達(dá)式來(lái)表示特定文字,然后可以將其全部刪除,或者替換為別的文字。在SQL語(yǔ)句中,要使用正則表達(dá)式強(qiáng)大的模式功能,需要借助SQL中新引入的一些謂詞。使用SQL提供的謂詞REGEXP_LIKE和正則表達(dá)式中的某些特殊字符,則上述查詢QQ號(hào)字段的操作可通過(guò)下面的SQL語(yǔ)句完成:

      可見(jiàn),通過(guò)引入正則表達(dá)式,原先的SQL語(yǔ)句被大大簡(jiǎn)化了。除了上面使用的謂詞REGEXP_LIKE之外,SQL還提供了其他3個(gè)謂詞,分別是REGEXP_INSTR、REGEXP_SUBSTR 和 REGEXP_REPLACE。它們的用法和SQL中的一般謂詞INSTR、SUBSTR和REPLACE相似。由于它們是用正則表達(dá)式代替一般謂詞中的通配符“%”和“_”,因此模式匹配功能要強(qiáng)大得多。如果對(duì)上述的QQ號(hào)查詢操作再加以條件限制:要求QQ號(hào)以10、11、12開(kāi)頭,以8結(jié)尾,且號(hào)碼長(zhǎng)度不超過(guò)8位數(shù)字,使用標(biāo)準(zhǔn)的SQL語(yǔ)句,完成這樣的查詢工作幾乎不可能,但是如果使用正則表達(dá)式,則查詢語(yǔ)句十分簡(jiǎn)單,如下所示:

      2 正則表達(dá)式的應(yīng)用

      2.1 創(chuàng)建數(shù)據(jù)庫(kù)表

      由于正則表達(dá)式在模式匹配方面的強(qiáng)大優(yōu)勢(shì),很多大型數(shù)據(jù)庫(kù)軟件廠商的產(chǎn)品,如Oracle公司的 Oracle 10g、微軟的 SQL Server 2005、IBM公司的DB2都開(kāi)始支持正則表達(dá)式的使用[7-8]。

      下面以O(shè)racle 10g平臺(tái)下開(kāi)發(fā)使用的學(xué)員信息管理系統(tǒng)為例,詳細(xì)介紹正則表達(dá)式在數(shù)據(jù)庫(kù)操作中的應(yīng)用。

      首先,要建立學(xué)員信息數(shù)據(jù)庫(kù)表,該數(shù)據(jù)庫(kù)包含的字段信息有用戶名、密碼、QQ號(hào)、email和學(xué)習(xí)卡號(hào)。為了能夠更詳細(xì)地掌握學(xué)員的信息,學(xué)習(xí)卡號(hào)的數(shù)據(jù)應(yīng)符合如下格式:**-****-****(*代表數(shù)字0~9)。其中,前兩位數(shù)字表示該學(xué)員的入學(xué)年份,中間的4位數(shù)字表示該學(xué)員所在城市的區(qū)號(hào),后4位數(shù)字表示學(xué)員的序號(hào)。如學(xué)習(xí)卡號(hào)08-0731-1024表示是08年長(zhǎng)沙地區(qū)序號(hào)為1024的學(xué)員。

      具體的SQL語(yǔ)句如下:

      本研究通過(guò)對(duì)我院收治的40例兒茶酚胺增多癥患者臨床資料的回顧性分析,可知了解兒茶酚胺增多癥患者的自身狀況,及時(shí)進(jìn)行針對(duì)性手術(shù)治療,能夠取得較好效果,值得臨床推廣。

      在上面的SQL語(yǔ)句中,正則表達(dá)式REGEXP_LIKE(stucard,′^([[:digit:]]{2}- [[:digit:]]{3,4}- [[:digit:]]{4})$ ′)給出了判斷學(xué)習(xí)卡號(hào)stucard是否符合規(guī)定的實(shí)現(xiàn)細(xì)節(jié),即stucard是由任意兩個(gè)數(shù)字開(kāi)頭,后接連字符“-”,再接3位或4位任意數(shù)字,隨后又是連字符“-”和任意4位數(shù)字,最后符號(hào)“$”為結(jié)尾符。其中,表達(dá)式中的[[:digit:]]完成匹配數(shù)字0~9的任務(wù),表達(dá)式{2},{3,4},{4}用來(lái)控制數(shù)字需要重復(fù)的次數(shù)。如果stucard字段的格式判斷由標(biāo)準(zhǔn)SQL語(yǔ)句來(lái)實(shí)現(xiàn),將會(huì)十分困難。

      完成數(shù)據(jù)庫(kù)表創(chuàng)建工作后,就可以插入學(xué)員記錄。以插入兩條學(xué)員記錄為例,相應(yīng)的SQL語(yǔ)句如下:

      以上插入記錄的stucard字段都符合規(guī)定格式,因此,能夠正確插入到數(shù)據(jù)庫(kù)表中。但是如果執(zhí)行下面兩條插入數(shù)據(jù)記錄的操作:

      由于第一條記錄stucard中025只包含3個(gè)數(shù)字,第二條記錄stucard中01只包含2個(gè)數(shù)字,格式不合規(guī)定,會(huì)導(dǎo)致錯(cuò)誤提示,插入記錄后的錯(cuò)誤提示界面圖如圖1所示。

      2.2 設(shè)計(jì)匹配模式

      在創(chuàng)建數(shù)據(jù)庫(kù)表的時(shí)候,并沒(méi)有給出用戶名、密碼、email等字段的約束條件。但在實(shí)際應(yīng)用中,這些字段也要符合相應(yīng)的規(guī)則[9-10],可以通過(guò)正則表達(dá)式設(shè)計(jì)的匹配模式來(lái)實(shí)現(xiàn)這些規(guī)則。設(shè)計(jì)匹配模式,首先要定義構(gòu)成規(guī)則,然后再利用正則表達(dá)式的語(yǔ)法進(jìn)行描述。下面給出上述幾種字段的匹配模式的設(shè)計(jì)。

      圖1 插入記錄后的錯(cuò)誤提示界面圖

      (1)用戶名的匹配模式。若用戶名的構(gòu)成規(guī)則是至少4個(gè)字符或漢字,至多20個(gè)字符或漢字,則匹配模式為“^.{4,10}$”。

      (3)email的匹配模式。一個(gè)合理的email地址至少要滿足以下條件:①包含一個(gè)且只有一個(gè)符號(hào)“@”;②“@”前至少有一個(gè)字符,且首字符只能是字母、數(shù)字和下劃線,后面的字符可以是字母、數(shù)字和下劃線,也可以是減號(hào)或圓點(diǎn)。若包含減號(hào)或圓點(diǎn),則不能有兩個(gè)或兩個(gè)以上相鄰,且后面必須有字符(字母、數(shù)字和下劃線);③“@”后至少有一個(gè)字符,且首字符只能是字母或數(shù)字,后面的字符可以是字母或數(shù)字,也可以是圓點(diǎn)或減號(hào)。若包含圓點(diǎn)或減號(hào),則不能有兩個(gè)或兩個(gè)以上相鄰,且后面必須有字符(字母或數(shù)字);④最后要由圓點(diǎn)后跟至少一個(gè)字符(字母或數(shù)字)結(jié)尾。

      根據(jù)上述原則,利用正則表達(dá)式的語(yǔ)法,可以得到如下模式匹配:“^w+((-w+)|(.w+))*@[A-Z a-z 0-9]+((.|-)[A-Z a-z 0-9]+)*.[A-Z a-z 0-9]+$”。

      2.3 創(chuàng)建觸發(fā)器

      基于上述匹配模式,可以創(chuàng)建觸發(fā)器來(lái)進(jìn)行數(shù)據(jù)操作的控制。筆者以創(chuàng)建用戶名和email觸發(fā)器為例,給出具體的SQL語(yǔ)句:

      (1)基于用戶名匹配模式的觸發(fā)器創(chuàng)建。

      觸發(fā)器創(chuàng)建后,當(dāng)插入記錄時(shí),首先判斷REGEXP_LIKE的返回值是否為真,如果返回值為假,表示輸入數(shù)據(jù)的格式不符合規(guī)定,就會(huì)觸發(fā)執(zhí)行相應(yīng)的SQL語(yǔ)句并提示錯(cuò)誤。

      如當(dāng)分別插入下面兩條記錄,記錄1的用戶名“l(fā)il”只包含3個(gè)字符,記錄 2的 email地址“l(fā)ucyyahoo.com.cn”沒(méi)有包含字符@,因此會(huì)導(dǎo)致觸發(fā)器cs1和cs2被分別觸發(fā)執(zhí)行,運(yùn)行結(jié)果如圖2所示。

      圖2 觸發(fā)器執(zhí)行結(jié)果

      3 結(jié)論

      正則表達(dá)式是一種用來(lái)進(jìn)行字符串模式匹配的強(qiáng)有力工具。將其應(yīng)用于標(biāo)準(zhǔn)SQL語(yǔ)句中,不僅可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)處理操作,而且還簡(jiǎn)化了SQL語(yǔ)句的復(fù)雜度,使對(duì)出錯(cuò)語(yǔ)句的修改工作變得更加簡(jiǎn)單方便。

      通過(guò)正則表達(dá)式在學(xué)員管理系統(tǒng)中的數(shù)據(jù)處理應(yīng)用,給出了詳細(xì)的語(yǔ)法規(guī)則和實(shí)現(xiàn)細(xì)節(jié),對(duì)提高數(shù)據(jù)處理的效率和簡(jiǎn)化數(shù)據(jù)處理的復(fù)雜度,具有較大的實(shí)用價(jià)值和參考價(jià)值。

      [1]王振輝,吳廣茂.SQL查詢語(yǔ)句優(yōu)化研究[J].計(jì)算機(jī)應(yīng)用,2005(12):207-208.

      [2]陳怡,卿峰.在C語(yǔ)言中使用正則表達(dá)式[J].華南金融電腦,2004(4):57-58.

      [3]李村和,孫運(yùn)雷.正則表達(dá)式在Oracle中的應(yīng)用與實(shí)現(xiàn)[J].微計(jì)算機(jī)應(yīng)用,2005(2):240-242.

      [4]GONZALO N,MATHIEU R.New techniques for regular expression searching[J].Algorithmica,2005,11(41):89-116.

      [5]YU F,CHEN Z F,DIAO Y L,et al.Fast and memory-efficient regular expression matching for deep packet inspetion[C]∥Proc of the 2006 ACM/IEEE Symposium on Architecture for Networking and Communications Systems.San Jose:ACM/IEEE,2006:93-102.

      [6]陳立娜.面向制造業(yè)的主動(dòng)搜索平臺(tái)的研究與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2009,3(2):56-58.

      [7]白琳.正則表達(dá)式在動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)中的應(yīng)用[J].湖南科技學(xué)院學(xué)報(bào),2009,30(2):47-49.

      [8]王燕,李冬梅.基于正則表達(dá)式的協(xié)議識(shí)別方案[J].教育技術(shù)導(dǎo)刊,2009(2):30-32.

      [9]王琳琳.基于HTML解析器的Web信息提取技術(shù)[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào):自然科學(xué)版,2008(6):25-29.

      [10]李文鵬..Dot Net正規(guī)表達(dá)式應(yīng)用研究[J].教育技術(shù)導(dǎo)刊,2009(1):36-38.

      猜你喜歡
      模式匹配字符串觸發(fā)器
      基于模式匹配的計(jì)算機(jī)網(wǎng)絡(luò)入侵防御系統(tǒng)
      電子制作(2019年13期)2020-01-14 03:15:32
      具有間隙約束的模式匹配的研究進(jìn)展
      OIP-IOS運(yùn)作與定價(jià)模式匹配的因素、機(jī)理、機(jī)制問(wèn)題
      主從JK觸發(fā)器邏輯功能分析
      電子世界(2017年22期)2017-12-02 03:03:45
      使用觸發(fā)器,強(qiáng)化安全性
      基于散列函數(shù)的模式匹配算法
      一種新的基于對(duì)稱性的字符串相似性處理算法
      依據(jù)字符串匹配的中文分詞模型研究
      對(duì)觸發(fā)器邏輯功能轉(zhuǎn)換的分析
      觸發(fā)器邏輯功能轉(zhuǎn)換的兩種方法
      巴楚县| 晋江市| 彰化市| 昆明市| 叶城县| 双辽市| 兰西县| 胶南市| 沐川县| 工布江达县| 吉林市| 塔河县| 武功县| 台中县| 南平市| 女性| 达孜县| 桐乡市| 华宁县| 抚顺县| 神池县| 瓮安县| 桃源县| 舒兰市| 南通市| 张掖市| 无极县| 浠水县| 海安县| 淮阳县| 拉萨市| 堆龙德庆县| 九龙城区| 当阳市| 永寿县| 洞口县| 华阴市| 顺昌县| 衡水市| 雷州市| 宁波市|