Я унаследовал блок кода, который содержит следующее регулярное выражение, и я пытаюсь понять, как он получает свои результаты.
var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
...
Для ввода 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" <=== how?
Глядя на этот вопрос из того, что я понимаю, в коллекции Groups хранится как полное совпадение, так и предыдущее совпадение. Но разве приведенное выше регулярное выражение не подходит только для [открытой квадратной скобки] [текста] [закрытой квадратной скобки], так почему же «jsmith» соответствует?
Кроме того, всегда ли коллекция групп будет хранить ровно 2 группы: полное совпадение и последнее совпадение?