日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET正则表达式使用高级技巧之替换类

發布時間:2023/12/15 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET正则表达式使用高级技巧之替换类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
.NET正則表達式使用高級技巧之替換類 因為.net的基本正則語法和Perl5基本相同,所以基本語法你可以去下載一下M$的JS幫助文檔,上面有詳細的說明\d表示什么,{,5}表示什么,\[表示什么……,這里我只想提醒大家一點,為了避免和反向引用相沖突,在你用\nn表示八進制的ASCII碼時,請在\后加0,就是說,\40在表示ASCII碼時,請這樣寫\040。

  替換

  Regex類有一個靜態的Replace方法,其實例也有一個Replace方法,這個方法很強大,因為它可以傳入一個delegate,這樣,你可以自定義每次捕獲匹配時,如何處理捕獲的內容。

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結果,該代碼返回"01 12 03 05"。Replace方法除了使用delegate來處理捕獲的Match,還可以用字符串來替換Match的結果,而用字符串來替換Match結果除了把Match結果靜態的替換成一個固定的文本外,還可以使用以下語法來更方便的實現你需要的功能:


$number   把匹配的第number組替換成替換表達式,還有這句話怎么寫也表達不清楚意思,還是來個例子吧:

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

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

  就是說,對組一的每個匹配結果都用"0$1"這個表達式來替換,"0$1"中"$1"由組1匹配的結果代入
${name}   把匹配的組名為"name"的組替換成表達式,

  上例的Regex expression改成@"(?<name>\d+)(?#這個是注釋)"后面的替換式改為"0${name}"結果是一樣的
$$   做$的轉義符,如上例表達式改成@"(?<name>\d+)(?#這個是注釋)"和"$$${name}",則結果為"$1 $12 $3 $5"
$&   替換整個匹配
$`  替換匹配前的字符
$'  替換匹配后的字符
$+   替換最后匹配的組
$_   替換整個字符串
  
  后面的選項,大家自己寫個例子體味一下。

  *注,上例中的(?#這個是注釋)說明了正則的內聯注釋語法為(?#)

  表達項選項

  正則表達式選項RegexOptions有如下一下選項,詳細說明請參考聯機幫助

RegexOptions枚舉值 內聯標志簡單說明
ExplicitCapture n 只有定義了命名或編號的組才捕獲
IgnoreCase i 不區分大小寫
IgnorePatternWhitespace x 消除模式中的非轉義空白并啟用由 # 標記的注釋。
MultiLinem 多行模式,其原理是修改了^和$的含義
SingleLine s 單行模式,和MultiLine相對應
  
  這里我提到內聯標志,是因為相對于用RegexOptions在new Regex時定義Regex表達式的全局選項來說,內聯標志可以更小粒度(以組為單位)的定義匹配選項,從而更方便表達我們的思想

  語法是這樣的:(?i:expression)為定義一個選項,(?-i:expression)為刪除一個選項,(?i-s:expression)則定義i,刪除s,是的,我們可以一次定義很多個選項。這樣,通過內聯選項,你就可以在一個Regex中定義一個組為匹分大小寫的,一個組不匹分大小寫的,是不是很方便呢? posted on 2007-07-23 11:04 無極.net 閱讀(...) 評論(...) 編輯 收藏 刷新評論刷新頁面返回頂部

轉載于:https://www.cnblogs.com/circlesport/archive/2007/07/23/827987.html

總結

以上是生活随笔為你收集整理的.NET正则表达式使用高级技巧之替换类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。