| $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" |
| $& |
替換整個匹配 |
| $` |
替換匹配前的字元 |
| $' |
替換匹配後的字元 |
| $+ |
替換最後匹配的組 |
| $_ |
替換整個字串 |
*注,上例中的(?#這個是注釋)說明了正則的內聯注釋文法為(?#)
表達項選項
Regex選項RegexOptions有如下一下選項,詳細說明請參考線上說明
| RegexOptions枚舉值 |
內聯標誌 |
簡單說明 |
| ExplicitCapture |
n |
只有定義了命名或編號的組才捕獲 |
| IgnoreCase |
i |
不區分大小寫 |
| IgnorePatternWhitespace |
x |
消除模式中的非轉義空白並啟用由 # 標記的注釋。 |
| MultiLine |
m |
多行模式,其原理是修改了^和$的含義 |
| SingleLine |
s |
單行模式,和MultiLine相對應 |
這裡我提到內聯標誌,是因為相對於用RegexOptions在new Regex時定義Regex運算式的全域選項來說,內聯標誌可以更小粒度(以組為單位)的定義匹配選項,從而更方便表達我們的思想
文法是這樣的:(?i:expression)為定義一個選項,(?-i:expression)為刪除一個選項,(?i-s:expression)則定義i,刪除s,是的,我們可以一次定義很多個選項。這樣,通過內聯選項,
你就可以在一個Regex中定義一個組為匹分大小寫,一個組不匹分大小寫,是不是很方便呢?