程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 用正則表達式的觀點看待.NET編程設計

用正則表達式的觀點看待.NET編程設計

編輯:關於.NET

其實正則表達充斥著我們的編程世界,從最底層的編譯器的編譯解析,到上層的字符串處理,都是正則表達式.我們重視它吧!

以前我也只是認為正則表達式這是一種驗證的工具,或者處理一些字符串文本,所以對它學習的也不深,直到我開發一個論壇,類似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,@"&","&amp");
string result=Regex.Replace(strString,@"<","&ait");

快速入門就說到這裡,也不知道大家的想法,如果大家讓我說說 

2.核心對象詳解  ,可以留個言,交流下,因為我覺得沒有基本看這些文章.可以不是很好理解,如果大家不愛看,我寫出來也沒有意義了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved