其實正則表達充斥著我們的編程世界,從最底層的編譯器的編譯解析,到上層的字符串處理,都是正則表達式.我們重視它吧!
以前我也只是認為正則表達式這是一種驗證的工具,或者處理一些字符串文本,所以對它學習的也不深,直到我開發一個論壇,類似Discuz!NT那樣的論壇時,我才重視正則表達式.特別是在從後台生成靜態頁面,和模板的時候,沒有正則表達式幾乎就不行.
在我的ASP.NET控件開發系列中有文章提過:我們把aspx頁面提交後,編譯器其實就是把那些標記,如:<asp:button......./>,用正則表達式模式來解析整個頁面的,例如,看見<asp:Button id="btn1"/>,就把它解析為一個Button類,然後整個充滿標記的aspx頁面,就被解析為了一個類(以.cs結尾的類).
還有例子就是:我們在給別人回復email的時候,我們總可以看見我們要寫的回復郵件的標題,地址,以及一些正文都有系統生成好了.
上面只是說明正則表達式重要的例子,大家想想,我們寫的程序,說白了就是一大堆的字符串文本,程序的編譯,實際上就是根據相應的規則處理我們程序文本的過程,編譯器在底層就是在用正則表達式分析我們的程序.也許大家認為我說這些沒有作用,因為編譯器的怎麼干,不關我們什麼事,但是明白了正則表達的作用以及機制之後,起碼可以使得我們對編程更加的順心.
所以在開發網站,比如論壇,CMS的時候,不把那些頁面看的很神秘,其實就是一堆字符串,也許這樣想,我們開發開心一點.
學習正則表達式,不僅僅只是學會幾個其中的幾個元字符就OK了的.如,我們都知道*,?,/s,/w等的意義.也能看懂很多的正則表達式.但是我們能夠掌握正則表達式的機制,隨心寫出自己想要的,高效匹配的正則表達式嗎?為什麼有分組的,捕獲,正則表達式引擎是怎樣回溯的?(要知道一些編譯原理的知識)在下面的內容中,我講把.NET中有關正則表達式的常用類和方法講下(C#描述),希望大家之前對正則表達式了解,如果想深入理解正則表達式,我給大家推薦本書"精通正則表達式".
講解的內容如下:
1.快速入門
2.核心對象詳解在.NET中使用
正則表達式要導入
using System.Text.RegularExpressions;
1.快速入門
1.1 在字符串中查找匹配:
//這段程度檢查一個正則表達式是否匹配一個字符串
if(Regex.IsMatch(strString,@"^\s*$")
Console.WriteLine("No,it is empty")
else
Console.WriteLine("Yes,it is not empty")
//注意IsMatch有重載的方法
//strString--被匹配的文本,,@"^\s*$"--用來匹配的正則表達式
if(Regex.IsMatch(strString,@"^\s*$",RegexOptions.IgnoreCase)//IgnoreCase不區分大小寫匹配
Console.WriteLine("No,it is empty")
else
Console.WriteLine("Yes,it is not empty")
1.2匹配,並且獲得匹配的文本:
//用來匹配字符串中的數字,如果strString中有數字,那麼返回就是那些匹配的數字
//否則返回就為空
string result=Regex.Match(strString,"\d+").Value;
注意,有重載的方法
//當然數字沒有大小寫,
string result=Regex.Match(strString,"\d+",RegexOptions.IgnoreCase).Value;
1.3匹配,並且獲得捕獲文本
string result=Regex.Match(strString,@"^Subject:(.*)").Groups[1].Value;
//應該記得正則表達式中的括號"()"的作用--分組,捕獲.
//如過你的串是strString="Subject:Hello Xiaoyang",那麼結果就是那個括號"()"中的".*"匹配"Hello Xiaoyang",然後你可以索引括號中匹配的文本
//用Groups.如果你的正則表達式中還有更多的括號"()",那麼你就的Groups[i]中數字就要根據你想得到的匹配串改變
//如我們把正則表達式是換為,^Subject:(H)(.*),那麼,你Groups[1].Value就為"H",Groups[2].Value就為"ello Xiaoyang"
//方法有重載的,就是加入RegexOption
當然,還有使用命名的捕獲:如下:
string result=Regex.Match(strString,@"^Subject:(?<Sub>.*)").Groups["Sub"].Value;
1.4.查找,替換
例如:我們一個字符串中的所有a轉換為b
string result=Regex.Replace(strString,@"^a$","b");
//更加實際的例子就是:轉換HTML的字符,如
string result=Regex.Replace(strString,@"&","&");
string result=Regex.Replace(strString,@"<","&ait");
快速入門就說到這裡,也不知道大家的想法,如果大家讓我說說
2.核心對象詳解 ,可以留個言,交流下,因為我覺得沒有基本看這些文章.可以不是很好理解,如果大家不愛看,我寫出來也沒有意義了!