2013-10-02 6 views
7

C#の正規表現に関する簡単な質問があります。

C#の正規表現で$ 1と$ 2とは何ですか?

どちらもグループに属していますか?

+2

FYIは、.NETの正規表現構文の一部です。 C#は正規表現をサポートしていません。すべての正規表現のサポートは.NET Frameworkの一部です。 –

+1

あなたの正規表現のサンプルを入れてください。 $ 1、$ 2、$は、あなたがそれを使用している状況に応じて異なることを意味する可能性があります。 @JohnSaundersが正しいです。 – celerno

+0

@celerno $ 1は番号の付いたグループ置換以外の何ものでもありませんか? –

答えて

8

これは、取得したグループのインデックスによる値です。 $ 1は最初にキャプチャされたグループで、$ 2はキャプチャされた2番目のグループです。 Davidが指摘しているように、これらの値は置換パターンで使用されます。

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

出力:これらは、substitutionsWorld Hello

3

です。特にnumbered group substitutions。ドキュメントから:

$数の言語要素は番号が キャプチャグループのインデックスである置換文字列、中 数キャプチャグループにマッチした最後の部分文字列を含んでいます。たとえば、置換パターン $ 1は、一致する部分文字列が最初に取り込まれたグループ に置き換えられることを示します。番号付きキャプチャグループの詳細については、 「正規表現でのコンストラクトのグループ化」を参照してください。

(?)の構文を使用して明示的に名前を割り当てられていないグループをキャプチャする場合は、左から右に1から番号が付けられます。 名前が付けられたグループには、左から右に番号が付けられます。最後の名前のないグループのインデックスよりも大きい数字の から始まります。例えば、 正規表現(\ w)を(?\ d)で、 グループという名前の数字のインデックスがある2

数が 正規表現パターンで定義された有効なキャプチャグループを指定しない場合

、 $ numberはリテラル の文字列として解釈され、それぞれの一致を置き換えます。

次の例では、$ number置換を使用して、 の通貨記号を10進数の値から削除しています。金額の冒頭または末尾にある通貨記号 を削除し、2つの最も一般的な小数点区切り文字( "。"と "、")を と認識します。

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

次のリンクの例を説明してください。 [リンク](http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx)_Secound example_ ** line ** 'string replacement =" $ 2 "; ' – Viki888

+0

これは、ドキュメントの最初の段落で説明しています私はその答えを引用しています。 '$ 1'は最初に捕捉されたグループであり、' $ 2'は捕捉された2番目のグループであり、以下同様です。 –

関連する問題