日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
.NET正則表達(dá)式的替換類(lèi)

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

  替換

  Regex類(lèi)有一個(gè)靜態(tài)的Replace方法,其實(shí)例也有一個(gè)Replace方法,這個(gè)方法很強(qiáng)大,因?yàn)樗梢詡魅胍粋€(gè)delegate,這樣,你可以自定義每次捕獲匹配時(shí),如何處理捕獲的內(nèi)容。

 
 
 
 
  1. public static void Main()
  2. {
  3. string s = "1 12 3 5";
  4. s = Regex.Replace(s,@"d+",new MatchEvaluator(CorrectString),RegexOptions.Compiled|RegexOptions.IgnoreCase);
  5. Console.WriteLine(s);
  6. Console.ReadLine();
  7. }
  8. private static string CorrectString(Match match)
  9. {
  10. string matchValue = match.Value;
  11. if(matchValue.Length == 1)
  12. matchValue = "0" + matchValue;
  13. return matchValue;
  14. }

以上這段代碼說(shuō)明了如果使用delegate MatchEvaluator 來(lái)處理正則的Match結(jié)果,該代碼返回"01 12 03 05"。Replace方法除了使用delegate來(lái)處理捕獲的Match,還可以用字符串來(lái)替換Match的結(jié)果,而用字符串來(lái)替換Match結(jié)果除了把Match結(jié)果靜態(tài)的替換成一個(gè)固定的文本外,還可以使用以下語(yǔ)法來(lái)更方便的實(shí)現(xiàn)你需要的功能:

  

$number 把匹配的第number組替換成替換表達(dá)式,還有這句話(huà)怎么寫(xiě)也表達(dá)不清楚意思,還是來(lái)個(gè)例子吧:

public static void Main()
{
string s = "1 12 3 5";
s = Regex.Replace(s,@"(d+)(?#這個(gè)是注釋)","0$1",RegexOptions.Compiled|RegexOptions.IgnoreCase);
Console.WriteLine(s);
Console.ReadLine();
}

這段代碼返回的是 “01 012 03 05”

就是說(shuō),對(duì)組一的每個(gè)匹配結(jié)果都用"0$1"這個(gè)表達(dá)式來(lái)替換,"0$1"中"$1"由組1匹配的結(jié)果代入

${name} 把匹配的組名為"name"的組替換成表達(dá)式,

上例的Regex expression改成@"(?d+)(?#這個(gè)是注釋)"后面的替換式改為"0${name}"結(jié)果是一樣的

$$ 做$的轉(zhuǎn)義符,如上例表達(dá)式改成@"(?d+)(?#這個(gè)是注釋)"和"$$${name}",則結(jié)果為"$1 $12 $3 $5"
$& 替換整個(gè)匹配
$` 替換匹配前的字符
$' 替換匹配后的字符
$+ 替換最后匹配的組
$_ 替換整個(gè)字符串

  

  后面的選項(xiàng),大家自己寫(xiě)個(gè)例子體味一下。

  *注,上例中的(?#這個(gè)是注釋)說(shuō)明了正則的內(nèi)聯(lián)注釋語(yǔ)法為(?#)

  表達(dá)項(xiàng)選項(xiàng)

  正則表達(dá)式選項(xiàng)RegexOptions有如下一下選項(xiàng),詳細(xì)說(shuō)明請(qǐng)參考聯(lián)機(jī)幫助

  

RegexOptions枚舉值 內(nèi)聯(lián)標(biāo)志 簡(jiǎn)單說(shuō)明
ExplicitCapture n 只有定義了命名或編號(hào)的組才捕獲
IgnoreCase i 不區(qū)分大小寫(xiě)
IgnorePatternWhitespace x 消除模式中的非轉(zhuǎn)義空白并啟用由 # 標(biāo)記的注釋。
MultiLine m 多行模式,其原理是修改了^和$的含義
SingleLine s 單行模式,和MultiLine相對(duì)應(yīng)

  這里我提到內(nèi)聯(lián)標(biāo)志,是因?yàn)橄鄬?duì)于用RegexOptions在new Regex時(shí)定義Regex表達(dá)式的全局選項(xiàng)來(lái)說(shuō),內(nèi)聯(lián)標(biāo)志可以更小粒度(以組為單位)的定義匹配選項(xiàng),從而更方便表達(dá)我們的思想

  語(yǔ)法是這樣的:(?i:expression)為定義一個(gè)選項(xiàng),(?-i:expression)為刪除一個(gè)選項(xiàng),(?i-s:expression)則定義i,刪除s,是的,我們可以一次定義很多個(gè)選項(xiàng)。這樣,通過(guò)內(nèi)聯(lián)選項(xiàng),你就可以在一個(gè)Regex中定義一個(gè)組為匹分大小寫(xiě)的,一個(gè)組不匹分大小寫(xiě)的,是不是很方便呢?


標(biāo)題名稱(chēng):.NET正則表達(dá)式的替換類(lèi)
分享網(wǎng)址:http://www.5511xx.com/article/coccich.html