【问题标题】:Regex.Match and noncapturing groupsRegex.Match 和非捕获组
【发布时间】:2011-08-10 06:06:51
【问题描述】:

谁能解释为什么 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

而不是空的?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    捕获不同于组。

    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”。

    【讨论】:

    • 谢谢 - 在这种情况下 MSDN 有点误导“获取与捕获组匹配的所有捕获的集合” - 正则表达式世界捕获组中的 AFAIK 被称为 (a) 构造
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2019-12-31
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多