剛接觸正則表達式時可能會覺得很暈乎.其實它的作用是很簡單的,只不過實現的細節方面有些復雜.正則表達式是用來解析字符串的.而解析字符串不外乎是達到下面幾種目的
1.驗證某一長串字符串中是否有符合某個條件的子字符串
2.從長字符串中提取符合某個條件的子字符串
3.把符合條件的子字符串替換成另外的字符串
4.把一個字符串分割成幾個小字符串
正則表達式的復雜主要是體現在怎麼指定那個"條件".其實實現上面說的4個目的大部分時候用string類的一些函數也照樣能實現.只不過有時太復雜了點
下面舉幾個簡單的例子說下怎麼實現上面的4個目的.使用正則表達式時要引用命名空間using System.Text.RegularExpressions;
假如有字符串string str = "I am arwen";我們想驗證下這個字符串裡是否包含字符"wen".
用正則表達式: bool exist = Regex.IsMatch(str, "wen");
用string類的函數:bool exist = str.Contains("wen");
假如有字符串string str ="ahttpp://www.linuxidc.com/s?tn=sitehao12";我們想把字符www.linuxidc.com提取出來
用正則表達式:string subStr = Regex.Match(str, @"w{3}\..*\.com").Value;
用string類的函數:
int start = str.IndexOf("w");
int end = str.IndexOf("m");
string subStr = str.Substring(start, end - start + 1);
隨著問題的復雜我們發現string類的函數就有點力不 從心了.假如是隨便給一段未知的字符串,然後要求提取出一個網址來.用string類函數實現起來很復雜而且容易出錯
而用上面那句簡單的正則表達式就能正確的提取.
還是和上面類似的例子,假如隨便給一段字符串,把裡面的網址替換成www.linuxidc.net
假設還是字符串string str ="ahttpp://www.linuxidc.com/s?tn=sitehao12";
用正則表達式.
string newStr = Regex.Replace(str, @"w{3}\..*\.com", "wwww.linuxidc.net");
這個用string的函數實現起來就更麻煩了啊.這裡就不用它來實現了.反正思路就是要先搜索出字符串裡的網址,再把它替換成www.linuxidc.net
假如有字符string str = "http:ww/w.linuxidc.com";要以: / .這樣的符號為分割符,把字符分割成只包含字母的子字符串
用正則表達式:
string[] strs = Regex.Split(str, @"[:/\.]");
用string類的函數
string[] strs = str.Split(new char[] { ':', '/', '.' });
在上面的例子中我們會看到@"w{3}\..*\.com" 和@"[:/\.]這樣奇怪的字符串,我們一般把它們叫作模式(pattern),也就是說通過它來指明要符合某個條件.在正則表達式的應用中最難的地方就是怎麼通過它們來指定條件.其中的符號都有特殊的含義