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

首頁 > 編程 > Regex > 正文

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

2020-03-16 21:10:33
字體:
供稿:網(wǎng)友
因為.net的基本正則語法和Perl5基本相同,所以基本語法你可以去下載一下M$的JS幫助文檔,上面有詳細的說明
 
 
/d表示什么,{,5}表示什么,/[表示什么……,這里我只想提醒大家一點,為了避免和反向引用相沖突,在你用/nn表示八進制的ASCII碼時,請在/后加0,就是說,/40在表示ASCII碼時,請這樣寫/040。 
 
  替換 
 
  Regex類有一個靜態(tài)的Replace方法,其實例也有一個Replace方法,這個方法很強大,因為它可以傳入一個delegate,這樣,你可以自定義每次捕獲匹配時,如何處理捕獲的內(nèi)容。
 
  以上這段代碼說明了如果使用delegate MatchEvaluator 來處理正則的Match結(jié)果,該代碼返回"01 12 03 05"。Replace方法除了使用delegate來處理捕獲的Match,還可以用字符串來替換Match的結(jié)果,而用字符串來替換Match結(jié)果除了把Match結(jié)果靜態(tài)的替換成一個固定的文本外,還可以使用以下語法來更方便的實現(xiàn)你需要的功能: 
復(fù)制代碼代碼如下:

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; 

 

$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” 

  就是說,對組一的每個匹配結(jié)果都用"0$1"這個表達式來替換,"0$1"中"$1"由組1匹配的結(jié)果代入

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

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

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

  表達項選項 

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

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

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 连南| 五莲县| 璧山县| 台北县| 宝鸡市| 万州区| 哈尔滨市| 炎陵县| 芮城县| 江源县| 错那县| 乌拉特后旗| 大宁县| 康平县| 韶关市| 澄江县| 交城县| 保康县| 兰州市| 丽水市| 惠安县| 宁安市| 江口县| 新绛县| 东平县| 淮阳县| 仁寿县| 嘉祥县| 视频| 玉田县| 紫金县| 通化县| 海丰县| 蓝田县| 措勤县| 定安县| 贵溪市| 五峰| 桂林市| 清水县| 金门县|