999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于正則表達式的模糊查詢和數據匹配驗證

2008-12-31 00:00:00楊成科
電腦知識與技術 2008年29期

摘要:正則表達式是編譯原理的核心理論之一,應用于各程序設計語言的編譯系統中,以分析程序源代碼中的各種記號。從程序設計的角度來看,正則表達式常常被用于設計模糊查詢程序和數據匹配驗證程序。

關鍵詞:正則表達式;編譯原理;模糊查詢;數據匹配驗證

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)29-0411-02

Fuzzy Query and Data Validations Based on Regular Expression

YANG Cheng-ke1,2

(1.Northwest Normal University,Lanzhou 730070,China;2.Gansu Economy School,Lanzhou 730050,China)

Abstract: Regular expression is a core principle of the theory compiling, applies to every compiling system of the programming language, analysis various sign of procedure source code. Regular expression often used in the design of data validations procedures or fuzzy query procedures.

Key words: regular expression; theory compiling; fuzzy query; data validations

1 引言

隨著因特網的普及,基于Web站點的模糊查詢和輸入數據的格式匹配驗證在網絡中的應用非常廣泛。比如使用搜索引擎在整個Web站點中搜索包含輸入關鍵字的信息;驗證輸入的值是否與某種可預知的字符序列相匹配,如身份證號碼、電子郵件地址、電話號碼、郵政編碼等字符序列。這些包含輸入關鍵字的信息和可預知的字符序列可以用正則表達式所定義的模式來描述。

本文簡要介紹了正則表達式及其運算,并從程序設計的角度分析了正則表達式在設計模糊查詢程序和數據匹配驗證程序方面的應用。

2 正則表達式及其運算

正則表達式是編譯原理中用來描述字符串格式的一種文本模式,這種文本模式完全由它所匹配的串集來定義;與程序設計語言中的表達式類似,正則表達式也是由運算對象和運算符組合而成,只不過其運算對象是基本正則表達式,運算符是一些具有運算含義的元字符而已。因此,充分理解正則表達式中具有運算含義的元字符,是我們正確使用正則表達式的首要條件。

不同的編程工具和軟件環境所支持的正則表達式的擴展運算和元字符有所不同。所以我們在使用時,必須根據應用的軟件環境注意區分。正則表達式有3種基本運算和若干個擴展運算。下面介紹3種基本運算,有關擴展運算的介紹參見文獻[1]。

1) 選擇:從多個選擇對象中選擇其一,用元字符“|”(豎線)表示。例如:正則表達式a|b匹配了a 或b 中的任一字符。

2) 連結:由并置表示(不用元字符)。例如:正則表達式ab只匹配ab。

3) 重復:正則表達式的重復也稱為“閉包”,由元字符“*”表示。例如:a*匹配串ε(空串)、a、aa、aaa . . .。

這3種基本運算的優先順序是: 重復運算*優先權最高,連結其次,選擇運算|最低。另外,使用括號可以改變它們的優先順序。

3 正則表達式用于模糊查詢

SQL語言的查詢語句通常使用LIKE關鍵字實現簡單的模糊查詢,其中用到的通配符就是正則表達式的元字符,由于SQL語言本身支持的通配符少、功能較弱, 所以不同的數據庫產品在標準SQL的基礎上都有所擴展,在此以Oracle Database為例來介紹正則表達式在模糊查詢方面的應用。

Oracle中用于正則表達式運算的有 REGEXP_LIKE操作符和 REGEXP_INSTR、REGEXP_SUBSTR以及REGEXP_REPLACE函數。被搜索的數據既可以是簡單的字符串,也可以是存儲在數據庫字符列中的大量文本。Oracle 的正則表達式支持 POSIX字符類, POSIX 字符類必須包含在一個由方括號 ([ ])指示的字符列表中,其中的元字符類似于命名的正則表達式,這樣寫出的正則表達式比較特別,可以包含控制字符一類的特殊字符。

Oracle支持的正則表達式元字符也有所變化,其中表達式首部的元字符“^” 表示一行正則表達式的開始,元字符“$”表示正則表達式一行的結尾;還用“{m}”表示前面的符號重復m次, 用“{m,n}”表示前面的符號有最少m次最多n次的重復,象a(b|c|d)e這樣的正則表達式還可以表示為a[bcd]e,匹配abe,ace, ade。另外,元字符“^”和元字符“-”還具有二義性,表達式首部的元字符“^”表示一行正則表達式的開始,而一個字符列表首部的元字符“^”代表非。因此,^[[:digit:]] 匹配以數字開始的模式,而[^[:digit:]] 匹配包含了任意非數字字符的模式。連字符 “-” 指示一個范圍,正則表達式 [a-m] 匹配字母 a 到字母 m 之間的任意字母。但如果它是一個字符行中的第一個字符(如在 [-afg] 中),則它就代表連字符。

使用REGEXP_LIKE操作符可以實現較為復雜的模糊查詢,如例1。

例1:在戶籍管理中,根據身份證號查找出生于1988年8月的蘭州市居民。

SELECT *

FROM Personal_Inf

WHERE REGEXP_LIKE(Pno,’^62010[[:digit:]]((198808[[:digit:]]{6})|(8808[[:digit:]]{5}))$’)

REGEXP_SUBSTR函數可以提取一個字符串與正則表達式相匹配的部分, REGEXP_INSTR 函數返回一個模式的起始位置, REGEXP_REPLACE函數用指定的字符串來替換匹配的模式。因篇幅所限,相關語法格式和功能描述請參閱文獻[2]。

4 正則表達式用于匹配驗證

Visual Studio.net通過System.Text.RegularExpressions 命名空間包含的一些類提供對正則表達式的支持,并且支持的元字符更加豐富、功能更加強大,所構造的模式也比較復雜,表2列出了部分元字符和它們在正則表達式上下文中的功能描述。

在 Web 站點設計中,我們常常要設計用戶注冊程序。要求用戶輸入用戶名、密碼、身份證號碼、電子郵件地址等信息,同時要驗證輸入的這些字符串是否符合相關的模式,比如密碼是否在六位以上、電子郵件地址是否符合格式等等。ASP.net的RegularExpressionValidator 控件用于驗證輸入控件的值是否與某個正則表達式所定義的模式相匹配。該控件的ValidationExpression 屬性指定用于驗證的正則表達式,客戶端的正則表達式驗證語法和服務器端略有不同。在客戶端,使用的是 JScript 正則表達式語法。而在服務器端使用的則是 Regex 語法。由于JScript 正則表達式語法是 Regex 語法的子集,所以最好使用 JScript正則表達式語法,以便在客戶端和服務器端得到同樣的結果。

例2: 驗證電子郵件地址格式的合法性。

<%@page clienttarget=downlevel%>

<html>

<body>

<h3> 驗證電子郵件地址的例子</h3>

<form runat=\"server\">

<table bgcolor=\"#eeeeee\" cellpadding=\"10\">

<td align=\"right\"> 請輸入電子郵件地址:</td>

<td><asp:TextBox id=\"TextBox1\" runat=\"server\"/></td>

<asp:RegularExpressionValidator id=\"RegularExpressionValidator1\"

ControlToValidate=\"TextBox1\"

ValidationExpression=\"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$\"

Display=\"Static\"

ErrorMessage=\"電子郵件地址錯誤!\"

EnableClientScript=\"False\"

runat=\"server\">

</asp:RegularExpressionValidator>

<tr><td> <asp:Button text=\"驗證\" runat=server /> </td> </tr>

</table>

</form>

</body>

</html>

在輸入格式錯誤的電子郵件地址后,運行結果如圖1所示。

5 結論

在事務處理程序與WEB程序的設計中, 搜索替換以及文本的匹配驗證是最常見的操作,傳統的設計方法是由用戶提供與預期的搜索結果匹配的精確文本。這對于靜態文本的搜索替換與匹配驗證已經足夠了,但它缺乏靈活性,若采用這種方法搜索或驗證動態文本,將會變得很困難。因此,引入正則表達式解決上述問題是較好的一種途徑。

參考文獻:

[1] 胡元義.編譯原理教程[M].西安: 西安電子科技大學出版社,2003.

[2] Rischert A. Writing Better SQL Using Regular Expressions[EB/OL].http://otn.oracle.com/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html.

[3] MSDN for Visual Studio .NET[DB/CD].Microsoft Corporation,2002.

[4] 石志國.ASP.NET實用案例教程[M].北京:清華大學出版社,2003.

主站蜘蛛池模板: 亚洲精品国产首次亮相| 欧美国产三级| 久久国产香蕉| 四虎亚洲精品| www.亚洲一区二区三区| 国产在线视频自拍| 久久五月天综合| 欧美三级视频网站| 久久这里只精品国产99热8| 国产网站黄| 欧美日韩国产系列在线观看| 狠狠色综合网| 国产成人一区二区| 国产av一码二码三码无码| 精品人妻系列无码专区久久| 国产亚洲高清在线精品99| 国产精彩视频在线观看| 91成人免费观看在线观看| 四虎影视8848永久精品| 毛片视频网址| 国产成人一区免费观看| 99精品在线视频观看| 欧美va亚洲va香蕉在线| 91美女视频在线| 四虎成人在线视频| 亚洲动漫h| 久久国产精品无码hdav| 九色综合视频网| 国产福利影院在线观看| 免费毛片视频| 伊人久久婷婷| 国产一在线| 女人18毛片久久| 四虎国产精品永久在线网址| 亚洲精品国产精品乱码不卞| 亚洲品质国产精品无码| 国产精鲁鲁网在线视频| 亚洲国产精品国自产拍A| 亚洲国产天堂在线观看| 国产精品爆乳99久久| 色综合热无码热国产| 午夜福利免费视频| 欧美国产日本高清不卡| 国产内射一区亚洲| 91网在线| 久久综合亚洲色一区二区三区| 亚洲无码视频喷水| 91成人在线免费观看| 99色亚洲国产精品11p| 五月婷婷激情四射| 日韩精品一区二区三区视频免费看 | 精品国产91爱| 色成人综合| 手机在线免费毛片| 人妻中文久热无码丝袜| 久夜色精品国产噜噜| 欧美日韩另类国产| 99re在线视频观看| 欧美精品H在线播放| 日本三区视频| 亚洲av中文无码乱人伦在线r| 不卡国产视频第一页| 亚洲精品福利视频| 国产成人无码综合亚洲日韩不卡| 久久久久人妻精品一区三寸蜜桃| 一本大道香蕉久中文在线播放| 第九色区aⅴ天堂久久香| 91在线视频福利| 国产日韩久久久久无码精品| 国产无遮挡猛进猛出免费软件| 波多野结衣一区二区三区四区| 日韩av电影一区二区三区四区| 欧美一级高清免费a| 婷婷综合在线观看丁香| 婷婷成人综合| 国产激情无码一区二区免费| 福利在线一区| 成人综合网址| AV在线天堂进入| 99热国产在线精品99| 国产另类视频| 美女亚洲一区|