Groupes et références arrière
Regroupez des caractères avec des parenthèses, créez des branches avec l'alternance, puis capturez une correspondance et réutilisez-la plus loin dans le même motif grâce à une référence arrière (backreference).
Lire les règles : Groupes : capturer et nommer dans le Guide →S'entraîner : Motifs retors →
Fait suite à Ancres et limites
Ce que vous allez apprendre
Étapes · 13
- 01Regrouper avec des parenthèsesBriefing
- 02Un groupe forme une unitéChasse
- 03Un quantificateur sur un groupeChasse
- 04L'alternance avec la barre verticaleChasse
- 05Surligner les alternativesChasse
- 06Regrouper les alternativesChasse
- 07Des groupes qui ne capturent pasChasse
- 08Références arrièreChasse
- 09Un palindrome de cinq lettresChasse
- 10Un mot répétéChasse
- 11Un groupe facultatifChasse
- 12Golf : syllabe répétéeChasse
- 13Capture et rappel maîtrisésBriefing
Groupes, alternance et références arrière en regex
Dans une expression régulière, des parenthèses forment un groupe : plusieurs caractères traités comme une seule unité. Placez un quantificateur après le groupe et il répète toute l'unité, pas seulement le dernier caractère. Mettez une barre verticale | à l'intérieur et vous obtenez une alternance, une liste de choix dont n'importe lequel peut correspondre.
Un groupe simple ( ) capture aussi. Il retient le texte exact qu'il a trouvé, et une référence arrière comme \1 redemande ce même texte plus loin dans le motif. C'est ainsi qu'une regex trouve des lettres répétées, des guillemets qui se répondent ou un mot tapé deux fois. Les groupes sont numérotés selon leur parenthèse ouvrante, en comptant depuis la gauche.
Quand vous voulez le regroupement sans la mémoire, écrivez un groupe non capturant, (?:...). Il regroupe et crée des branches de la même façon, et garde bien en ordre la numérotation de vos autres groupes. Dans une chasse, un groupe bien placé fait souvent la différence entre un motif qui attrape les cibles et un motif qui attrape aussi les innocents.
Exemples
Attrapés
- undo
- redo
Épargnés
- do
- outdo
- undone
Le groupe isole le choix entre
unetredu reste du motif, et les ancres écartent les mots plus longs.Attrapés
- 555-0199
- 0199
Épargnés
- 55-0199
- 555-019
- 5550-199
Le
?après le groupe rend tout l'indicatif facultatif, tiret compris, jamais à moitié.Attrapés
- ha!
- haha!
- hahaha!
Épargnés
- hah!
- ha
- aha!
Le
+après le groupe répète tout leha, pas seulement lea: unhégaré avant le!est donc épargné.Attrapés
- "hi"
- 'ok'
- say 'yo'
Épargnés
- "hi'
- 'ok"
- no quotes
Une référence arrière oblige le guillemet fermant à être celui qui a ouvert le texte.
Erreurs courantes
- Laisser l'alternance sans parenthèses. La barre verticale a la priorité la plus basse, donc
^red|blue$veut dire^redoublue$; entourez les choix,^(red|blue)$, quand les ancres doivent s'appliquer aux deux. - Utiliser des crochets pour des mots.
[red|blue]est une classe de caractères qui correspond à une seule lettre de cet ensemble (ou à la barre verticale elle-même), pas au motredoublue. - Décaler vos références arrière. Un nouveau groupe capturant placé plus tôt dans le motif renumérote tous les groupes suivants, et
\1pointe soudain ailleurs ; utilisez(?:...)pour les groupes que vous ne rappelez jamais.
Lire les règles : Groupes : capturer et nommer dans le Guide →S'entraîner : Motifs retors →
À lire aussi : Les références arrière en regex : des motifs qui se souviennent de ce qu'ils ont trouvé →
À lire aussi : Groupes nommés et groupes non capturants en regex →