Vous ne serez pas le premier qui est floue à ce sujet. Voici ce que le célèbre Jeffrey Friedl a à dire à ce sujet (pages 437+):
Selon votre point de vue, il ajoute
une intéressante nouvelle dimension à la
les résultats des matchs, ou ajoute de la confusion et de
la météorisation.
Et plus loin:
La principale différence entre un Groupe
objet et une Capture de l'objet, c'est que
chaque Groupe contient un objet
collection d'images représentant
tous l' intermédiaire des correspondances par l'
le groupe durant le match, ainsi que la
texte final compensée par le groupe.
Et quelques pages plus loin, c'est sa conclusion:
Après avoir passé l' .NET
la documentation et la réalité
la compréhension de ce que ces objets ajouter,
J'ai des sentiments mitigés au sujet de eux. Sur
d'une part, c'est intéressant
l'innovation [ ... ] sur l'autre main, il
semble ajouter une efficacité fardeau [..]
une fonctionnalité qui ne sera pas utilisé
dans la majorité des cas
En d'autres termes: ils sont très similaires, mais de temps en temps et, comme il arrive, vous aurez à trouver un emploi pour eux. Avant d'augmenter à nouveau de barbe grise, vous pouvez même prendre goût à la Capture...
Depuis ni la, ni ce qui est dit dans l'autre post semble vraiment répondre à votre question, considérons l'exemple suivant. Pense de Capture comme une sorte d'histoire tracker. Lorsque la regex fait son match, elle passe à travers la chaîne de gauche à droite (en ignorant retour en arrière pour un moment) et quand il rencontre un correspondant de la capture de parenthèses, il va la stocker dans $x
(x étant un chiffre), disons $1
.
Normal regex moteurs, lorsque la capture de parenthèses doivent être répétées, va jeter l'actuel $1
et la remplacer par la nouvelle valeur. Pas .NET, ce qui permettra à cette histoire et le place dans Captures[0]
.
Si nous changeons votre regex présente comme suit:
MatchCollection matches = Regex.Matches("{Q}{R}{S}", @"(\{[A-Z]\})+");
vous noterez que le premier Group
aura un Captures
(le premier groupe étant toujours l'ensemble du match, c'est à dire, égal à $0
) et le deuxième groupe tiendra {S}
, c'est à dire que le dernier de groupe correspondant. Cependant, et là est le hic, si vous voulez trouver les deux autres captures, ils sont en Captures
, qui contient tous les intermédiaires de capture pour {Q}
{R}
et {S}
.
Si vous jamais demandé comment vous pourriez obtenir à partir de la capture, qui n'affiche que le dernier match de l'individu capture qui sont clairement là dans la chaîne, vous devez utiliser Captures
.
Un dernier mot sur votre dernière question: le total des match a toujours un total de Capture, ne pas le mélanger avec les différents Groupes. Capture ne sont intéressants à l'intérieur des groupes.