2013-10-02 76 views
7

我有關於正則表達式在C#中的簡單問題。

什麼是C#正則表達式中的$ 1和$ 2?

兩者是否屬於羣體?

+2

僅供參考,那些是.NET正則表達式語法的一部分。 C#不支持正則表達式。所有正則表達式支持都是.NET Framework的一部分。 –

+1

請把你的正則表達式樣本。 $ 1,$ 2,$可能意味着不同的事情,這取決於您使用它的上下文。 而@JohnSaunders是對的。 – celerno

+0

@celerno除了編號的組替換之外,是否有1美元? –

回答

8

這是通過索引捕獲的組的值。 $ 1是第一個被捕獲的組,而$ 2是第二個被捕獲的組。正如David所指出的,這些值用於替換模式。

string input = "Hello World"; 
string result = Regex.Replace(input, @"(\w+) (\w+)", "$2 $1"); 

輸出:World Hello

3

這些是substitutions。具體爲numbered group substitutions。從文檔:

的$數語言元素包括由 匹配的最後一個子字符串替換字符串,其中number是 捕獲組的索引捕獲組的數量。例如,替換模式 $ 1表示匹配的子字符串將被第一個被捕獲的組替換。有關編號捕獲組的更多信息,請參見 請參見使用正則表達式對組合構造進行分組。

使用 (?)語法捕獲未明確指定名稱的組,從左到右從1開始編號。 命名組也從左到右編號,從一個 開始,大於最後未命名組的索引。例如,在 正則表達式(\ w)的(?\ d),命名 組數字的索引是2

如果數目沒有指定在 正則表達式模式中定義的有效捕獲組, $數字被解釋爲文字 用於替換每個匹配的字符序列。

以下示例使用$ number替換從十進制值中去除 貨幣符號。它將刪除貨幣值開頭或結尾處的貨幣符號 ,並識別兩個最常見的小數點分隔符(「。」和「,」) 。

using System; 
using System.Text.RegularExpressions; 

public class Example 
{ 
    public static void Main() 
    { 
     string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*"; 
     string replacement = "$1"; 
     string input = "$16.32 12.19 £16.29 €18.29 €18,29"; 
     string result = Regex.Replace(input, pattern, replacement); 
     Console.WriteLine(result); 
    } 
} 
// The example displays the following output: 
//  16.32 12.19 16.29 18.29 18,29 
+0

你能否在下面的鏈接中解釋一下這個例子? [link](http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx)_Secound example_ ** line **'string replacement =「$ 2」;' – Viki888

+0

這在文檔的第一段中有解釋我在答案中引用。 「$ 1」是第一個捕獲組,「$ 2」是第二個捕獲組,等等。 –

相關問題