Я немного расплывчатый, что разница между "группой" и "захватом" - это когда речь идет о языке регулярных выражений .NET. Рассмотрим следующий код С#:
MatchCollection matches = Regex.Matches("{Q}", @"^\{([A-Z])\}$");
Я ожидаю, что это приведет к единственному захвату для буквы "Q", но если я напечатаю свойства возвращаемого MatchCollection
, я вижу:
matches.Count: 1
matches[0].Value: {Q}
matches[0].Captures.Count: 1
matches[0].Captures[0].Value: {Q}
matches[0].Groups.Count: 2
matches[0].Groups[0].Value: {Q}
matches[0].Groups[0].Captures.Count: 1
matches[0].Groups[0].Captures[0].Value: {Q}
matches[0].Groups[1].Value: Q
matches[0].Groups[1].Captures.Count: 1
matches[0].Groups[1].Captures[0].Value: Q
Что именно здесь происходит? Я понимаю, что там также есть захват на весь матч, но как поступают группы? И почему matches[0].Captures
не включает захват для буквы "Q"?