正則核心物件詳解 三

2021-09-07 21:34:00 字數 2276 閱讀 4555

前言:很感謝大家對正規表示式文章的支援,這篇文章是這個系列的最後一節了,,但是正如之前所說的,這裡將的僅僅只是怎麼用.net的正規表示式類,但是,

對正規表示式的引擎的內部機制沒有提及,如果大家需要,我會繼續寫下有關內部機制的問題.

今天的內容如下:

1. match物件的使用

2. group物件的使用

3.便捷方法

4. 正規表示式的快取

今天的內容比較好懂.

1. match類的使用

一般有三種方法可以建立match物件:第一:regex的match方法,第二,靜態函式regex.match方法,第三,match物件自己的nextmatch方法.match物件封裝了某

個正規表示式物件的單次應用的所有的相關資訊.

下面介紹相關的屬性和方法:

假設:mymatch物件是我們已經建立好的乙個match物件.

mymatch.success屬性,返回乙個bool的值,表示乙個匹配是否成功.

mymatch.value屬性和mymatch.tostring方法,返回實際匹配的文字,注意:match是單次匹配

mymatch.length屬性,匹配文字的長度

mymatch.index屬性,返回是乙個整數,顯示匹配文字再目標中的其實位置,匹配是從字串的左邊向右匹配的,編號從0開始.

注意:這個數字表示從目標字串的最左邊到匹配文字的左邊的長度,如匹配"abc",而我們的串是" asdffabc",把麼index就是5.即使再建立match物件時設定了

regexoptions.rigthtoleft,返回值依

然不變.

mymatch.groups屬性,返回乙個groupcollection物件,其中封裝了多個match的物件,groupcollection是乙個普通的集合類,有item和count屬性,常用的

是按照索引來訪問,如之前的group[2].等等.,如果正規表示式有命名的捕獲括號匹配,還可以這樣:group["yourname"].value來訪問匹配的文字值.

注意:group[0]表示整個正規表示式匹配的所有文字,我們之前說過的.所以mymatch.groups[0].value就和mymatch.value是相等的.

2. group物件

其實這個物件和前面的match物件的方法和屬性很多一樣的,可以這麼說,group是match的乙個特例(他們只是不是繼承關係,我不清楚,,我沒有檢視msdn),但

是從理解上至少是這樣的,因為match表示乙個匹配,不管是什麼的樣的匹配,如:捕獲匹配,還是一般的匹配,只要是乙個匹配,我們就可以用match來封裝相關的資訊,而

group只是乙個捕獲性括號的匹配.

下面介紹方法和屬性:

同樣假設有乙個group物件 :mygroup.

mygroup.success屬性:返回bool,說明乙個分組是否參與了匹配,,不是所有的分組都參與匹配的.如,正規表示式"(abc)(def)"來匹配"abccc",那麼只

有"(abc)"那個分組匹配成功了.

mygroup.value屬性和mygroup.tostring方法:返回匹配的文字的副本,如上面的例子那個匹配分組的例子就返回"abc";

mygroup.length屬性,返回整數,表示匹配的分組匹配的文字的長度,如上面就例子返回"3";

mygroup.index屬性,返回分組匹配的文字的開始位置.如上面的例子就返回0.

3.便捷函式.

很多的時候,我們不用new乙個regex物件,因為regex這個類有很多的方法來直接使用.

regex.ismatch()呼叫這個靜態的方法,來表示匹配是否成功

regex.matches()

regex.replace()

regex.split()

以上方法我不贅述了,和之前的一樣.

4 正規表示式的快取

為簡單的正規表示式建立regex物件不方便,而且也不浪費資源,所有我們可以用regex類的一些靜態方法(見上).但是這些靜態的方法也是有缺陷的,因為每次呼叫的時候都會建立乙個臨時的regex的物件,而且用一次就丟棄了.特別是再迴圈中時,開銷更加大.所以為了避免重複的工作,可以快取靜態方法建立的臨時變數.

.net framework預設可以快取15個正規表示式,如果再迴圈中使用的正規表示式超過了15個,那麼第16個就取代第乙個,如此類推.

我們只要這樣,這樣:

regex.cachesize=123;就可以將預設的快取調整為你需要的.

注意:一般系統快取的是你最近用過的123個快取,也就是說,.net已經有了內部機制來快取,我們要知道這一點,而且只要設定cachesize就可以了.

正則核心物件詳解 二

前言 大家反映文章的排版有問題,我在寫文章的時候也一直注意這個問題,寫的時候排版不錯,但是發上去了就變了,我也不知道怎麼回事,希望大家理解 謝謝各位 1.regex類的一些高階話題.首先,我們接著上次的regex的一些繼續 1.1在regex中有乙個方法很奇怪的,那就是它的replace方法,很多的...

核心物件詳解

核心物件只是作業系統核心分配的乙個記憶體塊,並且只能由作業系統核心訪問。該記憶體塊是一種資料結構,它的成員負責維護該物件的各種資訊。windows提供一組函式建立和操作核心物件。呼叫乙個建立核心物件的函式,函式會返回乙個控制代碼,該控制代碼標識了這個核心物件,這個控制代碼可由當前程序中的所有執行緒呼...

Linux核心詳解(三)

linux中斷處理中斷使硬體發出通知給cpu,cpu接收到中斷後即停止當前工作並立刻向作業系統告知此訊號的到來 中斷控制器連線著多路中斷管線,當接收到乙個中斷後,中斷控制器便向cpu傳送乙個電訊號 硬體裝置生成中斷並不考慮與處理器的時鐘同步 中斷隨時可以產生,核心隨時被中斷。不同的裝置對應不同的中斷...