有一段時間正則表達式學習很火熱很潮流當時在CSDN一天就能看到好幾個正則表達式的帖子那段時間借助論壇以及Wrox Press出版的《C#字符串和正則表達式參考手冊》學習了一些基礎的知識同時也為我在CSDN大概賺了分今天想起來去找《C#字符串和正則表達式參考手冊》時已經不知所蹤了現在用到正則的時候也比較少把以前的筆記等整理一下以志不忘
()@符號符下兩ows表研究室的火熱當晨在@雖然並非C#正則表達式的成員但是它經常與C#正則表達式出雙入對@表示跟在它後面的字符串是個逐字字符串不是很好理解舉個例子以下兩個聲明是等效的string x=D\\My Huang\\My Doc;string y = @D\My Huang\My Doc;事實上如果按如下聲明C#將會報錯因為\在C#中用於實現轉義如\n換行string x = D\My Huang\My Doc;
()基本的語法字符
\d 的數字\D \d的補集(以所以字符為全集下同)即所有非數字的字符\w 單詞字符指大小寫字母的數字下劃線\W \w的補集\s 空白字符包括換行符\n回車符\r制表符\t垂直制表符\v換頁符\f \S \s的補集 除換行符\n外的任意字符[…] 匹配[]內所列出的所有字符[^…] 匹配非[]內所列出的字符下面提供一些簡單的示例
string i = \n;
string m = ;
Regex r = new Regex(@\D);
//同Regex r = new Regex(\\D);
//rIsMatch(i)結果true
//rIsMatch(m)結果false
string i = %;
string m = ;
Regex r = new Regex([az]);
//匹配小寫字母或數字字符
//rIsMatch(i)結果false
//rIsMatch(m)結果true
()定位字符定位字符所代表的是一個虛的字符它代表一個位置你也可以直觀地認為定位字符所代表的是某個字符與字符間的那個微小間隙
^ 表示其後的字符必須位於字符串的開始處$ 表示其前面的字符必須位於字符串的結束處\b 匹配一個單詞的邊界\B 匹配一個非單詞的邊界另外還包括\A 前面的字符必須位於字符處的開始處\z 前面的字符必須位於字符串的結束處\Z 前面的字符必須位於字符串的結束處或者位於換行符前下面提供一些簡單的示例
string i = Live for nothingdie for something;
Regex r = new Regex(^Live for nothingdie for something$);
//rIsMatch(i) true
Regex r = new Regex(^Live for nothingdie for some$);
//rIsMatch(i) false
Regex r = new Regex(^Live for nothingdie for some);
//rIsMatch(i) true
string i = @Live for nothing
die for something;//多行
Regex r = new Regex(^Live for nothingdie for something$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothingdie for something$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r\ndie for something$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r\n$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r\n$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^die for something$);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^die for something$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex($);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex($ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(^Live for nothing\r$\n^die for something$ RegexOptionsMultiline);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
//對於一個多行字符串在設置了Multiline選項之後^和$將出現多次匹配
string i = Live for nothingdie for something;
string m = Live for nothingdie for some thing;
Regex r = new Regex(@\bthing\b);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(@thing\b);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
Regex r = new Regex(@\bthing\b);
ConsoleWriteLine(r match count: + rMatches(m)Count);//
Regex r = new Regex(@\bfor something\b);
ConsoleWriteLine(r match count: + rMatches(i)Count);//
//\b通常用於約束一個完整的單詞
()重復描述字符重復描述字符是體現C#正則表達式很好很強大的地方之一{n} 匹配前面的字符n次{n} 匹配前面的字符n次或多於n次{nm} 匹配前面的字符n到m次? 匹配前面的字符或次+ 匹配前面的字符次或多於次* 匹配前面的字符次或式於次以下提供一些簡單的示例
string x = ;
string y = +;
string z = ;
string a = ;
string b=;
string c = ;
Regex r = new Regex(@^\+?[]?\d{}$);
ConsoleWriteLine(x match count: + rMatches(x)Count);//
ConsoleWriteLine(y match count: + rMatches(y)Count);//
ConsoleWriteLine(z match count: + rMatches(z)Count);//
ConsoleWriteLine(a match count: + rMatches(a)Count);//
ConsoleWriteLine(b match count: + rMatches(b)Count);//
ConsoleWriteLine(c match count: + rMatches(c)Count);//
//匹配到的整數
From:http://tw.wingwit.com/Article/program/net/201311/15538.html