天天看點

C#正規表達式程式設計(一):C#中有關正則的類

正規表達式是一門靈活性非常強的語言,比對同樣的字元串可能在不同的開發人員那裡會得到不同的結果,在平常的時候也是用的時候看看相關資料,不用的時候就丢在腦後了,盡管在處理大部分情況下都能迅速處理,但是處理一些複雜的情況效率仍是不高,借着前陣子做過的一個項目涉及到正規表達式的機會,将有關資料閱讀了一遍并結合了自己的體會,整理了幾篇利用C#進行正規表達式程式設計的文章,一來加深自己的印象和了解,二來供部落格上的讀者學習借鑒。

在.NET中提供了對正規表達式的支援,并且提供了相關的類,分别有:Regex、Match、Group、Capture、RegexOptions、MatchCollection、GroupCollection、CaptureCollection。它們之間的關聯如下:

對它們描述如下:

Regex:正規表達式類,代表了一個不可變的正規表達式。

Match:代表了Regex類的執行個體的一次比對結果,可以通過Regex的Match()執行個體方法傳回一個Match的執行個體。

MatchCollection:代表了Regex類的執行個體的所有比對結果,可以通過Regex的Matches()執行個體方法傳回一個MatchCollection的執行個體。

Group:表示單個捕獲組的結果。由于一次比對可能包含0個、1個或多個分組,是以Match的執行個體中傳回的是捕獲組集合的結果,即GroupCollection。

GroupCollection:表示單個比對中的多個捕獲組的集合,可以通過Match的Groups執行個體屬性傳回GroupCollection的執行個體。

Capture:表示單個捕獲中的一個子字元串。同Group一樣,由于一個捕獲中可能包含0個、1個或多個子字元串,是以Group的執行個體中傳回的是子字元串集合的結果,即CaptureCollection。

CaptureCollection:預設表示按照從裡到外、從左到右的順序由捕獲組比對到的所有子字元串集合,可以通過Group或者Match的Captures執行個體屬性傳回CaptureCollection的執行個體。注意,可以使用RegexOptions.RightToLeft來改變這種比對順序。

RegexOptions:提供用于設定正規表達式選項的枚舉值。 像上面提到的RightToLeft就是它的一個枚舉值之一,除此之外還有None、IgnoreCase、Multiline、ExplicitCapture、Compiled、Singleline、IgnorePatternWhitespace、RightToLeft、ECMAScript及CultureInvariant。RegexOptions枚舉值可以相加,比如我們想比對不區分大小寫的字元串“abc”并且還想提高一下執行速度,那麼可以寫如下代碼:

RegexOptions options=RegexOptions.IgnoreCase|RegexOptions.Compiled;

Regex regex=new Regex("abc",options);

Regex、Match、Group及Capture的關系及成員

從上圖可以看出Regex類提供了許多靜态方法,很多方法還提供了多種重載方式(在圖中對存在多種參數重載的方法都以“...”表示),除此之外我們還會發現Capture、Group及Match之間存在繼承關系(說實在話剛開始用的時候我發現它們之間存在着很多相同的字段,這讓我當時迷惑不已,希望大家看到這個圖後不要再像我當初那樣迷惑了)。

在使用C#中的正規表達式進行文本處理之前先花點時間了解一下.NET中有關正規表達式的類和它們之間的關系是有必要的,這篇就算是預熱篇了,在開始學習正規表達式之前做做熱身運動。雖然在C#中有關正規表達式的類不多,但是對于初學者來說還是容易引起混淆,進而出現不知道該用哪些類的哪些方法或者屬性的情況,這篇算是做個初步介紹吧。下一篇就先講述Regex類,利用Regex可以用來替換、分割和處理字元串。

本文轉自周金橋51CTO部落格,原文連結: http://blog.51cto.com/zhoufoxcn/280320,如需轉載請自行聯系原作者

繼續閱讀