Leçons du module (3/4)
Le joker : le point `.`
Le point . dans une regex est le caractère joker : il correspond à n'importe quel caractère unique… avec une exception importante : il ne correspond PAS au saut de ligne (\n).
Pattern: c.t
Sample: cat cot cut c@t c\nt
^^^ ^^^ ^^^ ^^^Trois lettres : un c, n'importe quel caractère, un t. Pas de saut de ligne au milieu, donc c\nt n'est pas mis en correspondance (par défaut).
Le point est extrêmement utile mais aussi dangereux : utilisé sans discipline, il capture plus que ce que vous vouliez. Combiné avec les quantificateurs du module 2 (.*, .+?), il est la source de 90 % des motifs qui "ne fonctionnent pas comme prévu".
Le drapeau s : "dotAll"
Avec le drapeau s (également appelé dotAll ou single-line), le point correspond à n'importe quel caractère, saut de ligne compris. Utile pour extraire des blocs qui s'étendent sur plusieurs lignes.
Pattern: <p>.*</p>
Flag: gs
Sample: <p>prima\nseconda</p>
^^^^^^^^^^^^^^^^^^^^^Limites et comportement du joker point
Le point . est un joker puissant, mais par défaut il ne correspond pas aux caractères de saut de ligne (\n). Si vous voulez que le point corresponde absolument à tout, y compris aux sauts de ligne, vous devez activer le drapeau s (dotAll). Soyez prudent lorsque vous combinez le point avec des quantificateurs (.*), car il a tendance à consommer trop de texte (comportement glouton ou greedy).
À vous de jouer
Trouvez chaque triplet de caractères délimité par des parenthèses, ex. `(abc)`, `(xyz)`. Utilisez le joker pour les 3 caractères internes.
Afficher l'indice
Trois points pour trois caractères arbitraires. Les parenthèses sont des méta-caractères : elles doivent être échappées avec \.
Solution disponible après 3 tentatives
Exercice de révision
Extrayez le bloc entre `[INIZIO]` et `[FINE]`, qui peut s'étendre sur plusieurs lignes. Vous aurez besoin du drapeau `s` pour que le point corresponde aux sauts de ligne, et de la version 'lazy' (paresseuse) du quantificateur (`.*?`, module 2).
Afficher l'indice
Sans le drapeau s, le point s'arrête en fin de ligne : ajoutez-le. La forme .*? (lazy) arrête la correspondance au premier [FINE].
Solution disponible après 3 tentatives
Défi supplémentaire
Trouvez toutes les séquences de 3 caractères commençant par `c` et se terminant par `t` (ex. `cat`, `cot`, `c-t`).
Afficher l'indice
Le motif utilise le point '.' pour représenter le caractère joker du milieu.
Solution disponible après 3 tentatives