Я согласен - это немного странно, но я думаю, что для этого есть веские причины.
Regex Match
само по себе Group
, что, в свою очередь, Capture
.
Но Match.Value
(или Capture.Value
в том виде, в каком он есть на самом деле) действителен, только если в строке присутствует одно совпадение - если вы сопоставляете несколько экземпляров шаблона, то по определению он не может вернуть все , Фактически - свойство Value
в Match соответствует удобству, когда есть только совпадение.
Но чтобы выяснить, где такое поведение передачи всего совпадения в Groups[0]
имеет смысл - рассмотрим этот (надуманный) пример унификатора наивного кода:
[TestMethod]
public void UnMinifyExample()
{
string toUnMinify = "{int somevalue = 0; /*init the value*/} /* end */";
string result = Regex.Replace(toUnMinify, @"(;|})\s*(/\*[^*]*?\*/)?\s*", "$0\n");
Assert.AreEqual("{int somevalue = 0; /*init the value*/\n} /* end */\n", result);
}
Соответствие регулярному выражению сохранит / * * / комментарии в конце оператора, а затем добавит новую строку - но работает для любого из них; или} окончания строки.
Хорошо, вы можете задаться вопросом, зачем вам это делать с помощью регулярных выражений, но позабавьте меня:)
Если бы Groups[0]
, сгенерированный совпадениями для этого регулярного выражения, не был полным захватом - тогда замена одним вызовом была бы невозможна - и ваш вопрос, вероятно, задавал бы вопрос, почему не полностью Матч вставляется в Groups[0]
, а не наоборот!