2014-05-17 65 views
0

我在一個正則表達式測試程序中測試了我的正則表達式,並且該語句本身顯示它應該工作,但不是匹配4個對象,而是它應該只匹配1個(整個字符串)我不知道爲什麼它甚至這樣做......關於正則表達式中多個匹配的混淆

rgx = new Regex(@"^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$"); 
matches = rgx.Matches("0.0.0.95"); 

在這一點上,如果我這樣做:

foreach (Match m in matches) 
{ 
    Console.WriteLine(m.Value); 
} 

它只會顯示「0.0.0.95」的時候,應該匹配0 ,0,0和95,而不是整個字符串。我在這裏做錯了什麼?

答案 - 整個字符串的單場包含的小組比賽我一直在尋找,以這種方式訪問​​:

r.r1 = Convert.ToInt32(m.Groups[1].Value); 
r.r2 = Convert.ToInt32(m.Groups[2].Value); 
r.r3 = Convert.ToInt32(m.Groups[3].Value); 
r.r4 = Convert.ToInt32(m.Groups[4].Value); 
+0

搜索關於MSDN組匹配。 – Mephy

+0

謝謝你的竅門 – wootowl

+0

我編輯了你的標題。請參閱「[應該在標題中是否包含」標籤「](http://meta.stackoverflow.com/questions/19190/)」,其中共識是「不,他們不應該」。 –

回答

2

在這種情況下,你沒有得到多重匹配 - 只有一個匹配在那裏,但它有四個捕獲組

^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$ 
// ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ 
// Group 1 Group 2 Group 3 Group 4 
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
//    Group 0 

有一個特殊的羣體數量爲零,包括整場比賽。

所以,你需要修改你的程序是這樣的:

Console.WriteLine("One:'{0}' Two:'{1}' Three:'{2}' Four:'{3}'" 
, m.Groups[1].Value 
, m.Groups[2].Value 
, m.Groups[3].Value 
, m.Groups[4].Value 
);