SomeeLab.tools

Testeur d’expressions régulières

Essayez une expression régulière sur votre propre texte : chaque correspondance est surlignée, avec les groupes de capture et un aperçu du remplacement.

Ce que font les quatre drapeaux

Sans g, seule la première correspondance est trouvée. Activez-le pour compter les occurrences ou toutes les remplacer.

i ignore la casse. m fait porter ^ et $ sur chaque ligne plutôt que sur la chaîne entière, ce qu’il faut pour attraper des débuts de ligne dans un journal.

s permet au . de correspondre aussi au saut de ligne. Par défaut le point ignore les sauts, donc un bloc réparti sur plusieurs lignes réclame ce drapeau pour être pris d’un seul tenant.

Les briques à retenir

  • \d chiffres, \w lettres, chiffres et souligné, \s espaces. En majuscules (\D \W \S), le sens est inversé.
  • + un ou plus, * zéro ou plus, ? facultatif, {2,4} de deux à quatre fois.
  • ^ début, $ fin, \b frontière de mot.
  • (...) capture et apparaît dans le résultat ; (?:...) regroupe sans capturer.
  • (?<nom>...) nomme un groupe pour le relire par son nom au lieu de son numéro.

Gourmand contre paresseux

.* avance aussi loin qu’il peut puis revient en arrière. Sur <b>un</b><b>deux</b>, le motif <b>.*</b> avale l’ensemble en une seule correspondance.

En ajoutant ? pour obtenir <b>.*?</b>, il s’arrête à la première occasion et l’on obtient deux correspondances. Pour ce qui se trouve entre des balises ou des guillemets, c’est presque toujours la version paresseuse qu’il faut.

Pourquoi le calcul tourne sur un fil séparé

Des quantificateurs imbriqués peuvent faire exploser une expression. Donnez à (a+)+b une trentaine de caractères a et le moteur essaie toutes les façons de les répartir : le travail croît de plusieurs ordres de grandeur. Une entrée minuscule l’occupe pendant des minutes.

Cet outil évalue le motif sur un fil qui lui est propre et supprime ce fil au bout d’une seconde. Impossible de l’interrompre en cours de route, puisque tout se passe à l’intérieur d’un seul appel. C’est ce qui permet à la page de rester réactive face à une expression emballée.

Le même phénomène sur un serveur immobilise une requête entière. Si une saisie d’utilisateur atteint une expression régulière dans votre code, les quantificateurs imbriqués sont la première chose à traquer.

La syntaxe change d’un langage à l’autre

Ce qui tourne ici est la variante de JavaScript. La recherche arrière ((?<=...)) fonctionne dans les navigateurs actuels, mais les fonctions propres à PCRE, comme la récursion ou les groupes atomiques, n’existent pas.

Python écrit les groupes nommés (?P<nom>...), et Java demande d’échapper une fois de plus les antislashs dans une chaîne. Adaptez la notation quand vous emportez un motif mis au point ici.