2011-06-30 106 views
1

爲什麼正則表達式返回多值的匹配?正則表達式從字符串選擇匹配問題

請參閱下面的代碼,它應該只返回一個結果。爲什麼有兩個?

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,它有一個捕獲組。 m.Groups[0]始終是整個比賽。 m.Groups[1]是第一個捕捉等。

如果你想看到所有的比賽,你可以這樣做:

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

但werid東西。如果我這樣做「^ \ [(RED)\]」,將匹配「RED」和「[RED]」,如果只有「^ \ [RED \]」,那麼我將只匹配「[RED]」...爲什麼???? – jojo

+0

'^ [(RED)]'是行開頭的角色類。它等價於'^ [DER()]'。方括號的意思是匹配任何*一個*裏面的字符。它將匹配這些字符中的任何一個:'()DER'。這就是爲什麼在你的情況下,你需要轉義'['和'[''像這樣:'^ \ [(RED)\]'。 –