Passer au contenu principal
eLearner.app
Module 4 · Leçon 3 sur 415/32 dans le cours~10 min
Leçons du module (3/4)

Groupes de non-capture : `(?:...)`

Souvent, les parenthèses ne sont nécessaires que pour grouper (quantifier, alterner) et NON pour extraire la valeur. Dans ce cas, utilisez la version non-capturante : (?:...). Elle fonctionne à l'identique de (...) mais ne crée pas de groupe numéroté.

Code
Pattern: (?:https?)://(\w+\.\w+)
Sample:  https://example.com e http://test.org
Match e gruppi:
  match  = "https://example.com"   gruppo1 = "example.com"
  match  = "http://test.org"        gruppo1 = "test.org"

(?:https?) regroupe le schéma pour lui appliquer le quantificateur ?, mais nous ne sommes pas intéressés par l'extraction de https en tant que groupe : le groupe 1 est directement le domaine.

Pourquoi l'utiliser

  1. Lisibilité : le lecteur comprend immédiatement que le groupe n'est là que pour la structure, et non pour en extraire une valeur.
  2. Performance : le moteur n'a pas à mémoriser la correspondance du groupe.
  3. Numérotation propre : les groupes numérotés restent alignés sur "les informations dont j'ai réellement besoin", sans interférence.

Optimisation avec les groupes non-capturants

L'utilisation de (?:...) indique au moteur d'appliquer les règles de regroupement et de quantificateur sans gaspiller de mémoire pour stocker des résultats de correspondance intermédiaires. Ceci est fortement recommandé dans les boucles lourdes ou les traitements de textes très longs.

À vous de jouer

Exercice#regex.m4.l3.e1
Tentatives : 0Chargement…

Extrayez le domaine (`example.com`, `test.org`…) de chaque URL du texte. Utilisez `(?:https?)` pour le protocole (pas besoin de le capturer) et un seul groupe pour le domaine.

Chargement de l'éditeur…
Afficher l'indice

Modifiez le premier groupe de (https?) en (?:https?) : pas besoin de le capturer, vous ne voulez que le domaine.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#regex.m4.l3.e2
Tentatives : 0Chargement…

Trouvez chaque répétition de `ab` sous la forme d'une seule correspondance, mais SANS capturer le groupe (car vous n'avez besoin que de la correspondance globale).

Chargement de l'éditeur…
Afficher l'indice

Même syntaxe que la leçon précédente, mais avec (?:ab)+ au lieu de (ab)+.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#regex.m4.l3.e3
Tentatives : 0Chargement…

Trouvez des chiffres de prix suivis facultativement de parties décimales à l'intérieur d'un groupe non-capturant, par exemple `100` ou `100.50`.

Chargement de l'éditeur…
Afficher l'indice

Utilisez (?:\.\d{2})? pour rendre la partie décimale facultative sans la capturer.

Solution disponible après 3 tentatives