Les expressions régulières se retrouvent dans une foule de langages et d'outils. Pour le détail veuillez consulter la documentation des expressions régulières
^
représente le début (d'une ligne, d'une chaine de caractères)
$
représente la fin (d'une ligne, d'une chaine de caractères)
.
représente n'importe quel caractère
e*
represente 0 ou plus occurences de e, soit "" ou "e" ou "ee" ou "eee"
e+
représente 1 ou plus occurences de e soit "e","ee","eee", etc
e?
represente 0 ou 1 occurence de e comme dans villes?
qui represente l'ensemble { "ville" , "villes" }
e|f
represente e ou f comme dans clé|clef
qui représente l'ensemble { "clé" , "clef" }
[xyz]
classes de caractères - voir doc
( )
groupage d'expressions, qui permet par ex. d'écrire (e|f)g
au lieu de ef|eg
Cette dizaine de symboles et de constructions ( le cas [xyz]
compte double ) constituent un noyau commun à tous les modules d'expressions régulières.
%
dans le cas du MOO, mais \
dans le cas d'emacs et de perl. (N.B. Les "regexps" d'emacs et du MOO ne diffèrent que par ce caractère d'échappement)
( |
et )
ont leur sens spécial lorsqu'ils sont précédés du caractère d'échappement, et leur sens normal autrement. Dans le cas de Perl, c'est le contraire.
Elle sont disponibles au menu "Edit" (Xemacs), avec le raccourci-clavier :C-M-s
Avec le verbe match()
Grep et egrep sont des outils UNIX très utiles, qui permettent de retrouver des fichiers et des lignes de texte dans des fichiers contenant un "pattern".
Un usage typique sera
egrep -i -l 'd\.?k\.?s\.?|schneider' /comm/tecfa/www/*.html
Qui va afficher les noms des fichiers *.html du répertoire /comm/tecfa/www/ contenant soit les initiales "D.K.S." soit le string "schneider".
M-x query-replace-regexp <\(/?\)b> RET <\1em> RET
remplacera tous les <b> par des <em> et les </b> par des </em>, en demandant une confirmation pour chaque apparition.
Perl est un langage de programmation complet, mais il admet des options d'invocations qui permettent d'accéder directement à son composant d'expressions régulières particulièrement puissant.
est l'équivalent de la commande emacs ci-dessus
Il y a une foule de modèles d'ordinateurs et de langages de programmation. Néanmoins, d'un point de vue théorique (c'est-à dire en ignorant les questions de performance et de limitation de mémoire) toutes ces machines (et langages) sont equivalentes, en ce sens qu'il est en principe possible de simuler chaque machine ou langage au moyen d'un programme (dit émulateur ou interpréteur) tournant sur une autre machine/langage. Ce fait est bien illustré, d'ailleurs, par les divers émulateurs Windows tournant sur Sun ou Mac.
De manière générale, les langages de programmation appartiennent a cette classe, dite de "la machine universelle". Les expressions régulières sont le cas d'exception d'un modèle de machine formelle moins puissant que la machine universelle mais néanmoins très utile et employé. Mais le plus souvent comme un "sous-langage", compartiment d'un langage plus puissant.
Un exemple de tache simple mais hors de portée du langage des expressions régulières : vérifier que les paires de parenthèses correspondent.
(.*)
va admettre 1) "(x)" et 2) "(x))
([^)]*)
élimine 2) mais admet 3) "((x)"
([^()]*)
reconnait correctement une paire de parenthèse mais n'autorise pas 4: "((x))"
En fait il est possible d'écrire des expressions régulières qui vont reconnaitre les chaines de caractères ayant un nombre maximum prédéterminé de parenthèses imbriquées. Ecrivez-en une qui reconnait deux niveaux de parenthèses.