這三個類都在System.Text.RegularExpressions命名空間內,他們互相保持繼承關係,如:
我們從外往內講起(我覺得這樣更好理解些),首先Match類表示一個最終的匹配,一個正則不一定只有一個匹配,這個可以通過Match.NextMatch來嘗試下面的匹配。而Regex中的所有組(Group)可以通過Match的Groups屬性得到。組可以通過索引值得到,也可以通過名稱得到。(沒有名稱的組排在有名稱組的前面),不過注意的是所有組都是以1開始的。以0開始的那個組(Groups[0])代表著整個Regex(可以不整個Regex看成一個最大的組)。
在組內(Group類),可以通過Captures擷取組的捕獲資訊(對應Capture類)。Group有一個Success屬性代表捕獲是否成功,實際上就是通過判斷Captures的Count是不是等於0.
這個捕獲(Capture類)代表組的具體匹配位置,Index屬性可以擷取匹配位置在整個字串中的索引值,還是Value代表匹配的字串值。Length就是匹配字串值的長度。
最後注意Capture,Group和Match類有繼承關係的,即Capture的成員Group和Match都會有,Group的成員Match也會有的。
最後看MSDN上的一個樣本(引用自:http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.capture.aspx)
代碼:
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "Yes. This dog is very friendly.";
string pattern = @"((\w+)[\s.])+";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine("Match: {0}", match.Value);
for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
{
Group group = match.Groups[groupCtr];
Console.WriteLine(" Group {0}: {1}", groupCtr, group.Value);
for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
Console.WriteLine(" Capture {0}: {1}", captureCtr,
group.Captures[captureCtr].Value);
}
}
}
}
輸出:
Match: Yes.
Group 0: Yes.
Capture 0: Yes.
Group 1: Yes.
Capture 0: Yes.
Group 2: Yes
Capture 0: Yes
Match: This dog is very friendly.
Group 0: This dog is very friendly.
Capture 0: This dog is very friendly.
Group 1: friendly.
Capture 0: This
Capture 1: dog
Capture 2: is
Capture 3: very
Capture 4: friendly.
Group 2: friendly
Capture 0: This
Capture 1: dog
Capture 2: is
Capture 3: very
Capture 4: friendly