繁体   English   中英

Regex.Match 和非捕获组

[英]Regex.Match and noncapturing groups

谁能解释为什么 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();
}

生产 output

a
a

而不是空的?

捕获不同于组。

matchResults.Groups[0]

总是整场比赛。 所以你的小组本来是

matchResults.Groups[1],

如果正则表达式是"(a)" 现在因为它是"(?:a)" ,你可以检查它是否为空。

捕获是一个单独的东西——它们允许你做这样的事情:

如果您有正则表达式"(.)+" ,那么它将匹配字符串"abc"

Group[1] 将是“c”,因为那是最后一个组,而

  1. Groups[1].Captures[0] 是“a”
  2. Groups[1].Captures[1] 是“b”
  3. Groups[1].Captures[2] 是“c”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM