因為.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() 這段代碼返回的是 “01 012 03 05” |
| ${name} | 把匹配的組名為"name"的組替換成表達式, 上例的regex expression改成@"(?<name>/d+)(?#這個是注釋)"后面的替換式改為"0${name}"結果是一樣的 |
| $$ | 做$的轉義符,如上例表達式改成@"(?<name>/d+)(?#這個是注釋)"和"$$${name}",則結果為"$1 $12 $3 $5" |
| $& | 替換整個匹配 |
| $` | 替換匹配前的字符 |
| $' | 替換匹配后的字符 |
| $+ | 替換最后匹配的組 |
| $_ | 替換整個字符串 |
| regexoptions枚舉值 | 內聯標志 | 簡單說明 |
| explicitcapture | n | 只有定義了命名或編號的組才捕獲 |
| ignorecase | i | 不區分大小寫 |
| ignorepatternwhitespace | x | 消除模式中的非轉義空白并啟用由 # 標記的注釋。 |
| multiline | m | 多行模式,其原理是修改了^和$的含義 |
| singleline | s | 單行模式,和multiline相對應 |
新聞熱點
疑難解答
圖片精選