C#中常用的正則表達(dá)式實例
目前為止,許多編程語言和工具都包含對正則表達(dá)式的支持,C#也不例外,C#基礎(chǔ)類庫中包含有一個命名空間(System.Text.RegularExpressions)和一系列可以充分發(fā)揮規(guī)則表達(dá)式威力的類(Regex、Match、Group等)。那么,什么是正則表達(dá)式,怎么定義正則表達(dá)式呢?
正則表達(dá)式基礎(chǔ)
什么是正則表達(dá)式
在編寫字符串的處理程序時,經(jīng)常會有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說,正則表達(dá)式就是記錄文本規(guī)則的代碼。
通常,我們在使用WINDOWS查找文件時,會使用通配符(*和?)。如果你想查找某個目錄下的所有Word文檔時,你就可以使用*.doc進(jìn)行查找,在這里,*就被解釋為任意字符串。和通配符類似,正則表達(dá)式也是用來進(jìn)行文本匹配的工具,只不過比起通配符,它能更精確地描述你的需求——當(dāng)然,代價就是更復(fù)雜。
一個簡單的例子——驗證電話號碼
學(xué)習(xí)正則表達(dá)式的最好方法是從例子開始,下面我們從驗證電話號碼開始,一步一步的了解正則表達(dá)式。
在我們國家,電話號碼(如:0379-65624150)通常包含3到4為以0開頭的區(qū)號和一個7或8為的號碼,中間通常以連字符'-'隔開。在這個例子中,首先我們要介紹一個元字符\d,它用來匹配一個0到9的數(shù)字。這個正則表達(dá)式可以寫成:^0\d{2,3}-\d{7,8}$
我們來對他進(jìn)行分析,0匹配數(shù)字“0”,\d匹配一個數(shù)字,{2,3}表示重復(fù)2到3次,-只匹配”-”自身,接下來的\d同樣匹配一個數(shù)字,而 {7,8}則表示重復(fù)7到8次。當(dāng)然,電話號碼還可以寫成 (0379)65624150,這里就交給讀者完成。
元字符
在上面的例子中,我們接觸到了一個元字符\d,正如你所想的,正則表達(dá)式還有很多像\d一樣的元字符,下表列出了一些常用的元字符:
表一常用的元字符
轉(zhuǎn)義字符
如果你想查找元字符本身的話,比如你查找.,或者*,就出現(xiàn)了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用\來取消這些字符的特殊意義。因此,你應(yīng)該使用\.和\*。當(dāng)然,要查找\本身,你也得用\\.
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
限定符
限定符又叫重復(fù)描述字符,表示一個字符要出現(xiàn)的次數(shù)。比如我們在匹配電話號碼時使用的{3,4}就表示出現(xiàn)3到4次。常用的限定符有:
表二常用的限定符
正則表達(dá)式在程序設(shè)計中有著重要的位置,它經(jīng)常被用于處理字符串信息,下面是正則常用的一些實例。
//驗證電話號碼<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}$"); } //驗證手機(jī)號碼 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}$)"); } //驗證小數(shù)格式 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])$"); } //驗證天數(shù) public bool IsDay(string str_day) { return System.Text.RegularExpressions.Regex. IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$"); } //驗證是否為數(shù)字 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}$"); } //驗證正整數(shù) 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}))$"); } //驗證IP public 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 + "\\." + num + "\\." + num + "\\." + num + "$")); } //驗證Url public bool IsUrl(string str_url) { return System.Text.RegularExpressions.Regex.IsMatch(str_url, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"); }
雖然現(xiàn)在很多驗證都由前端,但是掌握正則表達(dá)式會讓你在程序開發(fā)過程中快速解決很多東西,特別是在處理字符串的時候,算是比較全面的正則用法,如果有需要可聯(lián)系我,可直接運(yùn)行的源碼。
以上所述是小編給大家介紹的C#中常用的正則表達(dá)式小結(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
winform導(dǎo)出dataviewgrid數(shù)據(jù)為excel的方法
這篇文章主要介紹了winform導(dǎo)出dataviewgrid數(shù)據(jù)為excel的方法,可實現(xiàn)將dataViewGrid視圖中的數(shù)據(jù)導(dǎo)出為excel格式的功能,非常具有實用價值,需要的朋友可以參考下2015-01-01C#中WebBrowser.DocumentCompleted事件多次調(diào)用問題解決方法
這篇文章主要介紹了C#中WebBrowser.DocumentCompleted事件多次調(diào)用問題解決方法,本文講解了3種情況和各自情況的解決方法,需要的朋友可以參考下2015-01-01運(yùn)用示例簡單講解C#取消令牌CancellationTokenSource
這篇文章運(yùn)用示例簡單講解C#取消令牌CancellationTokenSource,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08