国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET正則表達式使用高級技巧之替換類

2024-07-10 13:11:41
字體:
來源:轉載
供稿:網友
菜鳥學堂:

  因為.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中定義一個組為匹分大小寫的,一個組不匹分大小寫的,是不是很方便呢?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陵水| 讷河市| 茌平县| 光山县| 嵩明县| 遵义市| 灵山县| 汕头市| 五华县| 福建省| 嵩明县| 双辽市| 宝山区| 石台县| 阜阳市| 甘洛县| 石门县| 明溪县| 革吉县| 陆丰市| 余干县| 凤冈县| 龙川县| 衡阳县| 类乌齐县| 盐源县| 始兴县| 泰宁县| 枣强县| 高阳县| 富蕴县| 瓦房店市| 阳泉市| 盐源县| 江华| 新泰市| 高唐县| 浙江省| 馆陶县| 新巴尔虎左旗| 皋兰县|