Я унаследовал блок кода, который содержит следующее регулярное выражение, и я пытаюсь понять, как он получает его результаты.
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?
Рассматривая этот вопрос из того, что я понимаю, коллекция групп хранит весь матч, а также предыдущий матч. Но, не соответствует ли regexp выше только для [open square bracket] [text] [close square bracket], так почему бы "jsmith" соответствовать?
Кроме того, всегда ли коллектив групп будет хранить ровно 2 группы: полное совпадение и последнее совпадение?