Passer au contenu principal
eLearner.app
Module 1 · Leçon 3 sur 43/32 dans le cours~8 min
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).

Code
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.

Code
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

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

Trouvez chaque triplet de caractères délimité par des parenthèses, ex. `(abc)`, `(xyz)`. Utilisez le joker pour les 3 caractères internes.

Chargement de l'éditeur…
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

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

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).

Chargement de l'éditeur…
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

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

Trouvez toutes les séquences de 3 caractères commençant par `c` et se terminant par `t` (ex. `cat`, `cot`, `c-t`).

Chargement de l'éditeur…
Afficher l'indice

Le motif utilise le point '.' pour représenter le caractère joker du milieu.

Solution disponible après 3 tentatives