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é.
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
- Lisibilité : le lecteur comprend immédiatement que le groupe n'est là que pour la structure, et non pour en extraire une valeur.
- Performance : le moteur n'a pas à mémoriser la correspondance du groupe.
- 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
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.
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
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).
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
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`.
Afficher l'indice
Utilisez (?:\.\d{2})? pour rendre la partie décimale facultative sans la capturer.
Solution disponible après 3 tentatives