目前為止,許多編程語言和工具都包含對正則表達式的支持,C#也不例外,C#基礎類庫中包含有一個命名空間(System.Text.RegularExpressions)和一系列可以充分發揮規則表達式威力的類(Regex、Match、Group等)。那么,什么是正則表達式,怎么定義正則表達式呢?
正則表達式基礎
什么是正則表達式
在編寫字符串的處理程序時,經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。
通常,我們在使用WINDOWS查找文件時,會使用通配符(*和?)。如果你想查找某個目錄下的所有Word文檔時,你就可以使用*.doc進行查找,在這里,*就被解釋為任意字符串。和通配符類似,正則表達式也是用來進行文本匹配的工具,只不過比起通配符,它能更精確地描述你的需求――當然,代價就是更復雜。
一個簡單的例子――驗證電話號碼
學習正則表達式的最好方法是從例子開始,下面我們從驗證電話號碼開始,一步一步的了解正則表達式。
在我們國家,電話號碼(如:0379-65624150)通常包含3到4為以0開頭的區號和一個7或8為的號碼,中間通常以連字符'-'隔開。在這個例子中,首先我們要介紹一個元字符/d,它用來匹配一個0到9的數字。這個正則表達式可以寫成:^0/d{2,3}-/d{7,8}$
我們來對他進行分析,0匹配數字“0”,/d匹配一個數字,{2,3}表示重復2到3次,-只匹配”-”自身,接下來的/d同樣匹配一個數字,而 {7,8}則表示重復7到8次。當然,電話號碼還可以寫成 (0379)65624150,這里就交給讀者完成。
元字符
在上面的例子中,我們接觸到了一個元字符/d,正如你所想的,正則表達式還有很多像/d一樣的元字符,下表列出了一些常用的元字符:
表一常用的元字符
轉義字符
如果你想查找元字符本身的話,比如你查找.,或者*,就出現了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用/來取消這些字符的特殊意義。因此,你應該使用/.和/*。當然,要查找/本身,你也得用//.
例如:unibetter/.com匹配unibetter.com,C://Windows匹配C:/Windows。
限定符
限定符又叫重復描述字符,表示一個字符要出現的次數。比如我們在匹配電話號碼時使用的{3,4}就表示出現3到4次。常用的限定符有:
表二常用的限定符
正則表達式在程序設計中有著重要的位置,它經常被用于處理字符串信息,下面是正則常用的一些實例。
//驗證電話號碼<br>public bool IsTelephone(string str_telephone){return System.Text.RegularExpressions. Regex.IsMatch(str_telephone, @"^(/d{3,4}-)?/d{6,8}$");}//驗證密碼public bool IsPassword(string str_password){return System.Text.RegularExpressions. Regex.IsMatch(str_password, @"[A-Za-z]+[0-9]");}//驗證郵政編碼public bool IsPostalcode(string str_postalcode){return System.Text.RegularExpressions.Regex.IsMatch(str_postalcode, @"^/d{6}$");}//驗證手機號碼public bool IsHandset(string str_handset){return System.Text.RegularExpressions.Regex. IsMatch(str_handset, @"^[1][3-5]/d{9}$");}//驗證身份證public bool IsIDcard(string str_idcard){return System.Text.RegularExpressions.Regex. IsMatch(str_idcard, @"(^/d{18}$)|(^/d{15}$)");}//驗證小數格式public bool IsDecimal(string str_decimal){return System.Text.RegularExpressions.Regex. IsMatch(str_decimal, @"^[0-9]+/.[0-9]{2}$");}//驗證月份public bool IsMonth(string str_Month){return System.Text.RegularExpressions.Regex. IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$");}//驗證天數public bool IsDay(string str_day){return System.Text.RegularExpressions.Regex. IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$");}//驗證是否為數字public bool IsNumber(string str_number){return System.Text.RegularExpressions.Regex. IsMatch(str_number, @"^[0-9]*$");}//驗證密碼長度public bool IsPasswLength(string str_Length){return System.Text.RegularExpressions.Regex. IsMatch(str_Length, @"^/d{6,18}$");}//驗證正整數public bool IsIntNumber(string str_intNumber){return System.Text.RegularExpressions.Regex. IsMatch(str_intNumber, @"^/+?[1-9][0-9]*$");}//驗證大小寫public bool IsUpChar(string str_UpChar){return System.Text.RegularExpressions.Regex. IsMatch(str_UpChar, @"^[A-Z]+$");}public bool IsLowerChar(string str_UpChar){return System.Text.RegularExpressions.Regex. IsMatch(str_UpChar, @"^[a-z]+$");}//驗證是否為字母public bool IsLetter(string str_Letter){return System.Text.RegularExpressions.Regex. IsMatch(str_Letter, @"^[A-Za-z]+$");}//驗證是否為中文public bool IsChinese(string str_chinese){return System.Text.RegularExpressions.Regex. IsMatch(str_chinese, @"^[/u4e00-/u9fa5]{1,}$");}//驗證郵箱public bool IsEmail(string str_Email){return System.Text.RegularExpressions.Regex.IsMatch(str_Email, @"^(([/w/.]+)@(([[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}))|((/w+/.?)+)@([a-zA-Z]{2,4}|[0-9]{1,3})(/.[a-zA-Z]{2,4}))$");}//驗證IPpublic bool IPCheck(string IP){string num = @"(25[0-5]|2[0-4]/d|[0-1]/d{2}|[1-9]?/d)"; return Regex.IsMatch(IP, ("^" + num + "http://." + num + "http://." + num + "http://." + num + "$"));}//驗證Urlpublic bool IsUrl(string str_url){return System.Text.RegularExpressions.Regex.IsMatch(str_url, @"http(s)?://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?");}
雖然現在很多驗證都由前端,但是掌握正則表達式會讓你在程序開發過程中快速解決很多東西,特別是在處理字符串的時候,算是比較全面的正則用法,如果有需要可聯系我,可直接運行的源碼。
以上所述是小編給大家介紹的C#中常用的正則表達式小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
新聞熱點
疑難解答