C# 正则匹配与非捕获群

C# 正则匹配与非捕获群,c#,.net,regex,C#,.net,Regex,有人能解释为什么Regex.Match捕获非捕获组吗。在MSDN中找不到关于它的任何信息。为什么 Regex regexObj = new Regex("(?:a)"); Match matchResults = regexObj.Match("aa"); while (matchResults.Success) { foreach (Capture g in matchResults.Captures) { Console.WriteLine(g.Value);

有人能解释为什么Regex.Match捕获非捕获组吗。在MSDN中找不到关于它的任何信息。为什么

Regex regexObj = new Regex("(?:a)");
Match matchResults = regexObj.Match("aa");
while (matchResults.Success)
{
    foreach (Capture g in matchResults.Captures)
    {
        Console.WriteLine(g.Value);
    }
    matchResults = matchResults.NextMatch();
}
产出

a
a

而不是空的?

捕获与组不同

matchResults.Groups[0]
永远是比赛的全部。所以你的团队应该是

matchResults.Groups[1],
如果正则表达式是
“(a)”
。现在,由于它是
“(?:a)”
,您可以检查它是否为空

捕获是一件独立的事情-它们允许您执行以下操作:

如果您有regex
“()+”
,那么它将匹配字符串
“abc”

组[1]则为“c”,因为这是最后一组,而

  • 组[1]。捕获[0]为“a”
  • 组[1]。捕获的[1]为“b”
  • 组[1]。捕获的[2]为“c”

  • 谢谢-在这种情况下,MSDN有点误导性,“获取捕获组匹配的所有捕获的集合”-REGEX world捕获组中的AFAIK称为(a)构造