regex — группы регулярных выражений в C #

Группы регулярных выражений в C #

Я унаследовал блок кода, который содержит следующее регулярное выражение, и я пытаюсь понять, как он дает свои результаты.

 var pattern = @"[(.*?)]"; var matches = Regex.Matches(user, pattern); if (matches.Count {amp}gt; 0 {amp}amp;{amp}amp; matches[0].Groups.Count {amp}gt; 1) ... 

Для user == "Josh Smith [jsmith]" ввода user == "Josh Smith [jsmith]" :

 matches.Count == 1 matches[0].Value == "[jsmith]" 

… что я понимаю. Но потом:

 matches[0].Groups.Count == 2 matches[0].Groups[0].Value == "[jsmith]" matches[0].Groups[1].Value == "jsmith" {amp}lt;=== how? 

Глядя на этот вопрос из того, что я понимаю, коллекция Groups хранит как весь матч, так и предыдущий матч. Но разве приведенное выше регулярное выражение не подходит только для [открытой квадратной скобки] [текста] [закрытой квадратной скобки], так почему же «jsmith» соответствует?

Кроме того, всегда ли в коллекции групп будет храниться ровно 2 группы: полное совпадение и последнее совпадение?

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector