Dans une regex les parenthèses servent à capturer des caractères qui seront stockés dans l'objet Match.
Mais leurs fonctionnalités ne sont pas toujours bien connues.
Reference à un groupe : numerique ou nommée
Chaque parenthèse ouvrante provoque la création d'un groupe qui sera accessible par son numéro.
La numérotation commence à 1 , le texte capturé dans le groupe '1' pourra etre rappelé plus loin dans la
regex par '\1' .
La méthode groups() de l'objet match, retournera la liste des textes capturés. Le groupe 0 qui est un emplacement libre, contiendra tout le texte capturé.
Comme on peut le voir ci-dessous, les groupes peuvent se voir attribuer un nom pour plus de lisibilité
Cette opération se réalise par le motif (?P=<NOM> .... )
La recherche en regardant en avant ou en arrière (lookahead / lookbehind) .
Avant de capturer un groupe, on va chercher à former des paires complète en avant du groupe à capturer.
Recherche en avant
Pour cela on utilise la séquence de groupe (?=...) ou sa forme négative (?!...)
En ajoutant aux bons endroits le motif "(?:)" on ne capture plus les groupes inutiles
Le motif (?:...) permet d'effectuer de regroupement mais ne conserve pas la capture dans un groupe
Recherche en arrière
De manière symétrique à la recherche en avant, il est possible de faire dépendre la recherche d'un motif sur du texte situé en arrière (lookbehind).
Cette opération se réalise avec le motif (?<=...) ou par sa négation (?<!...)