2011-06-30 9 views
1

なぜ正規表現は一致のマルチ値を返しますか?文字列からの一致を選択する正規表現

次のコードを参照してください。結果は1つだけ返されます。なぜ2つあるのですか?

e.g 
Match m = Regex.Match("[Red] #,0.00 \"Ex\"", @"^\[(RED|GREEN|ORANGE)\]", RegexOptions.IgnoreCase); 

      if (m.Success) 
      { 
       Console.WriteLine(m.Groups.Count);  
       Console.WriteLine(m.Groups[0].Value); 
       Console.WriteLine(m.Groups[1].Value); 
      } 
      else 
       Console.WriteLine("No match"); 

========Result=============== 
2 
[Red] 
Red 
Press any key to continue . . . 

答えて

3

単一の一致グループmがあります。このグループには1つのキャプチャグループがあります。 m.Groups[0]は常に完全一致です。 werid物事がされ

foreach (Match m in regex.Matches (input)) 
    Console.WriteLine (m.Value); 
+0

しかし:m.Groups[1]はあなたがすべての一致を見たい場合は、あなたがこれを行うことができます...など、

最初のキャプチャです。 "^ \ [(RED)\]"を行うと "RED"と "[RED]"が一致し、 "^ \ [RED \]"しかない場合は "[RED]"に一致しますなぜ???? – jojo

+0

'^ [(RED)]'は、行頭の文字クラスです。それは '^ [DER()]'と同義です。角括弧は、内部の文字の* 1 *に一致することを意味します。 '()DER'のいずれかの文字と一致します。だからあなたの場合、 '['と '[' '\ [(赤)\]'のようにエスケープする必要があります。 –

関連する問題