Leçons du module (4/4)
Lookaround en pratique
Mettons en pratique les quatre formes de lookaround dans des scénarios réels. Les lookarounds excellent lorsque vous devez :
- Extraire une valeur sans le contexte qui l'identifie.
- Valider une chaîne par rapport à plusieurs conditions indépendantes.
- Filtrer les correspondances qui satisfont à certaines conditions mais pas à d'autres.
Validation de mot de passe
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- au moins une majuscule (?=.*[A-Z])
- au moins un chiffre (?=.*\d)
- au moins un symbole (?=.*[^a-zA-Z\d])
- longueur minimale de 8 .{8,}Chaque lookahead vérifie une condition, en partant du début (^). Ils sont tous de largeur nulle : le moteur reste à la position 0 puis consomme avec .{8,}$.
Extraction entre délimiteurs
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (sans les parenthèses)Lookbehind + lookahead + quantificateur paresseux (lazy) : extrait le contenu à l'intérieur des parenthèses sans les inclure.
Combinaison de lookahead et de lookbehind
L'utilisation conjointe de lookahead et de lookbehind permet d'isoler des chaînes qui se trouvent dans des balises ou des formats spécifiques (par exemple, extraire du texte entre deux balises sans inclure les balises dans la correspondance finale). Cela évite les opérations ultérieures de nettoyage de chaînes.
À vous de jouer
Extrayez la valeur de chaque affectation `key=value` du journal : UNIQUEMENT les valeurs (pas de clés, pas de `=`). Les valeurs peuvent contenir des lettres et des chiffres.
Afficher l'indice
Déplacez `=` à l'intérieur d'un lookbehind (?<==) : de cette façon, la correspondance ne contient que la valeur.
Solution disponible après 3 tentatives
Exercice de révision
Trouvez quels mots ont au moins UNE lettre majuscule ET au moins UN chiffre (dans n'importe quel ordre), en les localisant dans le texte.
Afficher l'indice
Double lookahead au début : (?=\w*[A-Z])(?=\w*\d). Consommez ensuite le mot avec \w+.
Solution disponible après 3 tentatives
Défi supplémentaire
Extrayez uniquement les chiffres numériques qui sont entourés exactement de parenthèses, par exemple extrayez `102` de `(102)` sans capturer les parenthèses.
Afficher l'indice
Combinez un lookbehind positif (?<=\( ) pour la parenthèse ouvrante et un lookahead positif (?=\) ) pour la parenthèse fermante.
Solution disponible après 3 tentatives