Syntaxe des expressions régulières

Cette description repose en partie sur la documentation de REGEXP, bibliothèque de Henry Spencer utilisée par Sally pour les expressions régulières.

Syntaxe de base des expressions régulières
  • '^' — en début d’expression, correspond au début de ligne ; '^test' trouve 'test' placé en début de ligne
  • '$' — en fin d’expression, correspond à la fin de ligne
  • '.' — tout caractère unique : 'do.' correspond à 'dog', 'dot', 'doe', etc. ; 'd..r' à 'door', 'deer', etc.
  • '*' — après une expression, correspond à zéro occurrence ou plus : 'ad*' trouve 'a', 'ad' et 'add', soit 'a' suivi d’un nombre quelconque de 'd'.
  • '+' — après une expression, une occurrence ou plus : 'do+' trouve 'do' et 'doo', soit 'd' suivi d’au moins un 'o'
  • '?' — après une expression, zéro ou une occurrence : 'add?' trouve 'ad' et 'add', soit 'ad' suivi d’un 'd' facultatif
  • '|' — entre expressions, correspond à l’une ou l’autre : 'red|blue|black' trouve chacun de ces mots
  • '[ ]' — correspond uniquement à un caractère présent entre crochets : 'a[dts]' trouve 'ad', 'at' et 'as'
  • '[^ ]' — correspond uniquement à un caractère absent des crochets : '[^abc]' trouve tout sauf 'a', 'b' et 'c'
  • '[-]' — définit une plage : '1[0-9]' trouve tous les nombres de '10' à '19'
  • '( )' — regroupe des expressions : '(very )*well' trouve 'well', 'very well', 'very very well', etc., soit un nombre quelconque de 'very ' suivi de 'well'
  • '\' — avant un caractère, correspond à celui-ci : 'too\.' ne trouve que 'too.', tandis que 'too.' trouve 'tool', 'took' et 'toon', soit 'too' suivi de tout caractère
Syntaxe des expressions régulières

Une expression régulière contient zéro branche ou plus, séparées par '|', et correspond à ce qui correspond à l’une des branches.

Une branche concatène zéro élément ou plus, correspondant au premier, puis au second, etc.

Un élément est un atome éventuellement suivi de '*', '+' ou '?'. '*' répète l’atome zéro fois ou plus, '+' une fois ou plus, et '?' correspond à l’atome ou à la chaîne vide.

Un atome est une expression entre parenthèses, une plage (voir ci-dessous), '.' pour tout caractère unique, '^' pour la chaîne vide en début de ligne, '$' pour la chaîne vide en fin de ligne, '\' suivi d’un caractère pour ce caractère, ou un caractère sans signification spéciale pour lui-même.

Une plage est une séquence entre '[]', correspondant normalement à un caractère de cette séquence. Avec '^' en tête, elle correspond à un caractère absent du reste. Deux caractères séparés par '-' désignent toute la plage ASCII entre eux : '[0-9]' pour les chiffres. Pour inclure ']', placez-le en premier après l’éventuel '^'. Pour inclure '-', placez-le au début ou à la fin.

Ambiguïté

Si deux parties du texte correspondent, celle qui commence le plus tôt est choisie. Si les débuts coïncident mais les longueurs ou façons de correspondre diffèrent, les règles suivantes s’appliquent.

Les branches sont examinées de gauche à droite ; '*', '+' et '?' de la correspondance la plus longue à la plus courte ; les constructions imbriquées de l’extérieur vers l’intérieur ; les concaténations de gauche à droite. La première possibilité valable est choisie.

Par exemple, '(ab|a)b*c' peut trouver 'abc' de deux façons. 'ab' est essayé avant 'a' et permet une correspondance complète, donc il est retenu. Le 'b' étant déjà consommé, 'b*' ne peut que correspondre à la chaîne vide pour respecter ce choix.

Sans '|' et avec un seul '*', '+' ou '?', la correspondance la plus longue est choisie. 'ab*' sur 'xabbbby' trouve 'abbbb'. Mais sur 'xabyabbbz', il trouve 'ab' juste après 'x', car le début le plus précoce reste prioritaire.

From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository