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*
represente 0 ou plus occurences
d'un élément. Donc e* représente soit "" ou "e" ou "ee" ou "eee"+
représente 1 ou plus
occurences de e soit "e","ee","eee", etc?
represente 0 ou 1 occurence de e
comme s? dans villes?
qui represente l'ensemble
{ "ville" , "villes" }
|
represente un choix entre chaines de caractères, comme la|le
qui représente
l'ensemble { "la" , "le" }
( )
groupage d'expressions, qui permet par
ex. d'écrire (e|f)g
au lieu de
eg|fg
. Le groupage est aussi utile pour faire
des substitutions (voir plus bas).[xyz]
classes de caractères -
voir docCette dizaine de symboles et de constructions constituent un noyau commun à à presque tous les modules d'expressions régulières.
\w
représente tout caractère alphanumérique (donc qui peut faire partie d'un mot au sens formel, c.a.d. lettres et chiffres).
\W
représente tout caractère non alphanumérique (donc qui peut pas faire partie d'un mot au sens formel, c.a.d. ponctuations, espaces, etc.)
\
dans le cas d'emacs, de PhP et de Perl,
\\
dans JavaScript et %
dans le
cas du MOO.
(N.B. Les "regexps" d'emacs/PhP et du MOO ne diffèrent que par ce caractère d'échappement)
(, |, )
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 et de JavaScript, c'est le contraire ! Notez également
qu'il faut utiliser \\
dans JavaScript !
Il est utile d'utiliser Xemacs pour tester vos expressions fait en PHP, JS etc. Faites attention à la syntaxe de citation qui n'est pas forcément la même.
Par exemple pour chercher à la fois "is" et "in" il faut utiliser i\(s\|n\)
.
Avec les méthodes match, replace, search de string. Voir String Matching And Replacing In Javascript 1.2 et The Javascript Reference Guide: en particulier RegExp and String
Voir le chapitre "Regular Expression Functions" et surtout les fonctions eregi(pattern, string) et ereg(pattern, string)
eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT); /* Returns true if client browser is Netscape 2, 3 or MSIE 3. */
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' /www/*.html
Qui va afficher les noms des fichiers *.html du répertoire /www/ contenant soit les initiales "D.K.S." soit le string "schneider".
Même chose, mais en cherchant dans des sous-répertoires (ATTENTION: ce type de commande est gourmande en ressources CPU). Le résultat de la recherche est mis dans le fichier "t".
find . -name "*.html" -exec grep -il 'd\.?k\.?s\.?|schneider' {} >> t \;
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.
$string = ereg_replace ("$", "<BR>", $string); /* Mettre un <BR> tag au début de $string. */ $string = ereg_replace ("\n", "", $string); /* Tuer les caractères newline dans $string. */
$n
, par exemple $1 ou $2 ci-dessous.input = "surf is green"; pattern = "/(\\w*) is (.*)/ig"; replyPattern = "What is so $2 about $1?"; result = input.replace(pattern, replyPattern); Ca donne result = What is so green about surf?
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 formellemoins 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.