新聞中心
因?yàn)?NET的基本正則語法和Perl5基本相同,所以基本語法你可以去下載一下M$的JS幫助文檔,上面有詳細(xì)的說明d表示什么,{,5}表示什么,[表示什么……,這里我只想提醒大家一點(diǎn),為了避免和反向引用相沖突,在你用n表示八進(jìn)制的ASCII碼時,請?jiān)诤蠹?,就是說,在表示ASCII碼時,請這樣寫 。 powered by 25175.net

替換
Regex類有一個靜態(tài)的Replace方法,其實(shí)例也有一個Replace方法,這個方法很強(qiáng)大,因?yàn)樗梢詡魅胍粋€delegate,這樣,你可以自定義每次捕獲匹配時,如何處理捕獲的內(nèi)容。
- public static void Main()
- {
- string s = "1 12 3 5";
- s = Regex.Replace(s,@"d+",new MatchEvaluator(CorrectString),RegexOptions.Compiled|RegexOptions.IgnoreCase);
- Console.WriteLine(s);
- Console.ReadLine();
- }
- private static string CorrectString(Match match)
- {
- string matchValue = match.Value;
- if(matchValue.Length == 1)
- matchValue = "0" + matchValue;
- return matchValue;
- }
以上這段代碼說明了如果使用delegate MatchEvaluator 來處理正則的Match結(jié)果,該代碼返回"01 12 03 05"。Replace方法除了使用delegate來處理捕獲的Match,還可以用字符串來替換Match的結(jié)果,而用字符串來替換Match結(jié)果除了把Match結(jié)果靜態(tài)的替換成一個固定的文本外,還可以使用以下語法來更方便的實(shí)現(xiàn)你需要的功能:
| $number | 把匹配的第number組替換成替換表達(dá)式,還有這句話怎么寫也表達(dá)不清楚意思,還是來個例子吧: public static void Main() 這段代碼返回的是 “01 012 03 05” 就是說,對組一的每個匹配結(jié)果都用"0$1"這個表達(dá)式來替換,"0$1"中"$1"由組1匹配的結(jié)果代入 |
| ${name} | 把匹配的組名為"name"的組替換成表達(dá)式, 上例的Regex expression改成@"(? |
| $$ | 做$的轉(zhuǎn)義符,如上例表達(dá)式改成@"(? |
| $& | 替換整個匹配 |
| $` | 替換匹配前的字符 |
| $' | 替換匹配后的字符 |
| $+ | 替換最后匹配的組 |
| $_ | 替換整個字符串 |
后面的選項(xiàng),大家自己寫個例子體味一下。
*注,上例中的(?#這個是注釋)說明了正則的內(nèi)聯(lián)注釋語法為(?#)
表達(dá)項(xiàng)選項(xiàng)
正則表達(dá)式選項(xiàng)RegexOptions有如下一下選項(xiàng),詳細(xì)說明請參考聯(lián)機(jī)幫助
| RegexOptions枚舉值 | 內(nèi)聯(lián)標(biāo)志 | 簡單說明 |
| ExplicitCapture | n | 只有定義了命名或編號的組才捕獲 |
| IgnoreCase | i | 不區(qū)分大小寫 |
| IgnorePatternWhitespace | x | 消除模式中的非轉(zhuǎn)義空白并啟用由 # 標(biāo)記的注釋。 |
| MultiLine | m | 多行模式,其原理是修改了^和$的含義 |
| SingleLine | s | 單行模式,和MultiLine相對應(yīng) |
這里我提到內(nèi)聯(lián)標(biāo)志,是因?yàn)橄鄬τ谟肦egexOptions在new Regex時定義Regex表達(dá)式的全局選項(xiàng)來說,內(nèi)聯(lián)標(biāo)志可以更小粒度(以組為單位)的定義匹配選項(xiàng),從而更方便表達(dá)我們的思想
語法是這樣的:(?i:expression)為定義一個選項(xiàng),(?-i:expression)為刪除一個選項(xiàng),(?i-s:expression)則定義i,刪除s,是的,我們可以一次定義很多個選項(xiàng)。這樣,通過內(nèi)聯(lián)選項(xiàng),你就可以在一個Regex中定義一個組為匹分大小寫的,一個組不匹分大小寫的,是不是很方便呢?
本文標(biāo)題:.NET正則表達(dá)式的替換類
網(wǎng)頁URL:http://www.dlmjj.cn/article/coccich.html


咨詢
建站咨詢
