match.Groups[0]is always the same asmatch.Value, which is the entire match.match.Groups[1]is the first capturing group in your regular expression.
Consider this example:
var pattern = @"\[(.*?)\](.*)";
var match = Regex.Match("ignored [john] John Johnson", pattern);
In this case,
match.Valueis"[john] John Johnson"match.Groups[0]is always the same asmatch.Value,"[john] John Johnson".match.Groups[1]is the group of captures from the(.*?).match.Groups[2]is the group of captures from the(.*).match.Groups[1].Capturesis yet another dimension.
Consider another example:
var pattern = @"(\[.*?\])+";
var match = Regex.Match("[john][johnny]", pattern);
Note that we are looking for one or more bracketed names in a row. You need to be able to get each name separately. Enter Captures!
match.Groups[0]is always the same asmatch.Value,"[john][johnny]".match.Groups[1]is the group of captures from the(\[.*?\])+. The same asmatch.Valuein this case.match.Groups[1].Captures[0]is the same asmatch.Groups[1].Valuematch.Groups[1].Captures[1]is[john]match.Groups[1].Captures[2]is[johnny]