C# 正则匹配与非捕获群
有人能解释为什么Regex.Match捕获非捕获组吗。在MSDN中找不到关于它的任何信息。为什么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 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”,因为这是最后一组,而
谢谢-在这种情况下,MSDN有点误导性,“获取捕获组匹配的所有捕获的集合”-REGEX world捕获组中的AFAIK称为(a)构造