mardi 23 juillet 2013

Référence d’expressions régulières

Initialement publié le 21 juillet 2006 à 19 h 45

Ce billet ne prétend pas à l’exhaustivité et est écrit par un illettré de regexps (qui aimerait bien s’y mettre sérieusement, quand même). Inspiration :


Caractères spéciaux
Opérateur Sens
. Reconnait n’importe quel caractère ( )
^ Reconnait le début d’une ligne
$ Reconnait la fin d’une ligne
* Reconnait 0 fois ou plus le dernier caractère
+ Reconnait 1 fois ou plus le dernier caractère
? Reconnait 0 ou 1 fois (mais pas plus) le dernier caractère
{n} Reconnait n fois exactement le dernier caractère
{n,} Reconnait au moins n fois le dernier caractère
{n,m} Reconnait au mois n fois mais pas plus de m fois
\ Ne considère pas le caractère suivant comme spécial
| Alternative
() Modèles ou groupement
[] Classe de caractères

Les descriptions ne sont pas forcément rigoureuses, mais essaient d’être plus parlantes. \ ne signifie pas Ne considère pas le caractère suivant comme spécial (parlant) mais ne pas interpréter le caractère suivant (rigoureux).

Afin d’alléger le tableau, dans les exemples suivants, ou doit se comprendre comme et/ou 1. Pour les geeks : OR, pas XOR. De même, une suite de ou sera remplacée par des virgules puis un ou à la fin.

Exemples
Opérateur Sens Exemple
abcd abcd C’est l’abcd de la vie
[abcd] a, b, c ou d Diantre !
^abcd abcd en début de ligne abcd forme le début de l’alphabet
abcd$ abcd en fin de ligne l’alphabet commence par abcd
[^abcd] Aucun des caractères a, b, c ou d Empyrée
a|b a ou b Bonbon et Caramel
(ab|cd) ab ou cd Abaque
ab[cde] abc, abd ou abe Abe Simpson
(ht|f)tp http ou ftp <a href="http://blog.empyree.org">
[0-9] Tous chiffres entre 0 et 9 29 ans et trois mois
[a-z] Toutes lettres entre a et z Heu
[a-zA-Z] Toutes lettres entre a et z et entre A et Z Heu
[a-z0-9]+ Suite de caractères alphanumériques (casse indifférente ?) julian37
[^a-z] Aucune minuscule Heu…
[a-z]+ Suite de lettres entre a et z Une phrase sans ponctuation ou chiffre
ab.*cd ab puis 0+ caractères puis cd abcd, abdsd9,lcd
(plop)+ Un ou plusieurs plop plop, plopplop, plap

Si vous avez des exemples plus utiles (recettes personnelles) que ces cas d’écoles, je serais ravi de les signaler.

En voici un :


<!DOCTYPE.*<h2>
Toute chaîne commençant par <!DOCTYPE, suivi d’un nombre quelconque de caractères et se terminant par <h2>
Dans un billet DotClear, supprimer tout ce qui vient avant le billet lui-même.

Remarques

Alphabet

Pour [a-z], s’agit-il uniquement de l’alphabet anglais (26 caractères) ou bien de l’alphabet de la langue courante (définit par exemple par un xml:lang) ? Un é ou un š seront-t-il pris en compte dans des textes respectivement en français et en slovène ? Le seront-ils dans des textes respectivement en slovène et en français (où ces caractères n’existent respectivement pas) ?

Casse et « alphanumérisme »

[a-z0-9]+ est-il insensible à la casse ? Comment puis-je introduire une sensibilité ? Pas que ça m’intéresse, juste pour savoir.

Différence entre ab[cde] et (ht|f)tp

Dans le premier cas, le choix s’opère sur une seule lettre, alors que dans le second, certains choix acceptés sont des groupes de lettres. Le second peut donc faire toute ce que fait le premier (mais c’est plus long à écrire), mais le contraire n’est pas vrai.

Numération

Je ne suis pas certain pour [0-9]. C’est peut-être [09] (sans le trait d’union). Quid des autres systèmes de numération (binaire, hhexadécimal) ? J’imagine que les notations non positionnelles (numération romaine : II,IV, XIV…) ne sont pas gérées, mais ça ne me gêne pas.


  1. Il parait que la conjonction et est inclusive en français, mais je ne trouve pas de source


La citation à-peu-près-dans-le-sujet du jour : Some people, when confronted with a problem, think I know, I’ll use regular expressions. Now they have two problems.

Aucun commentaire:

Enregistrer un commentaire

Flattr: cliquez pour une micro-donation [web payable]