0% ont trouvé ce document utile (0 vote)
110 vues10 pages

Regex

Transféré par

agsmfs
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
110 vues10 pages

Regex

Transféré par

agsmfs
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Utilisation des expressions rgulires en .

Net
par MORAND Louis-Guillaume

Date de publication : 08/03/2005 Dernire mise jour : 08/03/2005

Tutoriel pas pas expliquant le principe, la syntaxe et l'utilisation des REGEX en .Net

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

Avant-propos 1 - Les expressions rgulires 1.1 - Leur utilisation 1.2 - Leur syntaxe 1.3 - Exemples 2 - Les expressions rgulires et .Net 2.1 - Utilisation en .Net 2.2 - Validation d'une chane 2.3 - Remplacement dans une chane 2.4 - Dcoupage dans une chane 2.4.1 - Dcoupage par sparateur 2.4.2 - Dcoupage par regroupement Conclusion Liens

-2Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

Avant-propos
Les expressions rgulires (galement appeles Regex ou Regexp) sont une traduction contreverse de "regular expressions" que les puristes appeleront les expressions rationnelles. Par la suite, nous utiliserons donc le terme "Regex" afin de rester neutre :)

-3Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

1 - Les expressions rgulires 1.1 - Leur utilisation


Les Regex sont un outil (ou plutt un systme) trs puissant permettant de vrifier la syntaxe d'une chane de caractres. Plus prcisment, c'est vrifier que la chane de caractres examiner respecte un motif ou une srie de motifs (notre Regex) dsignant la syntaxe attendue de la phrase.

Les Regex sont utilises pour trois grands types d'action : - Vrifier la syntaxe(forme) d'une chane de caractres (ex : adresse ip de forme chiffre.chiffre.chiffre.chiffre) - Remplacer une partie de la chane (token) par un lment spcifique - Dcouper une chane de caractres

Leur utilisation la plus courante est de vrifier la syntaxe d'une chane, c'est--dire contrler qu'elle respecte un format prdfini et norm, dcrit par les combinaisons d'oprateurs et de valeurs de la chane Regex.

1.2 - Leur syntaxe


Les Regex sont donc une suite de motifs qui se composent de mtacaractres, de classes sous .NET et d'alias. Voici tout d'abord, une srie de mtacaractres pouvant tre utiliss et ayant chacun une correspondance bien prcise. Symbole Correspondance \ Caractre d'chappement ^ Dbut de ligne . N'importe quel caractre $ Fin de ligne | Alternative () Groupement Intervalle de caractres [] Ensemble de caractres [^] Tout sauf un ensemble de caractres + 1 fois ou plus ? 0 ou 1 fois * 0 fois ou plus {x} x fois exactement {x,} x fois ou moins {x, y} x fois minimum, y maximum Exemple [\.] contient un "." ^b$ contient uniquement b ^.$ contient un seul caractre er$ finit par "er" ^(a|A) commence par a ou A ^((a)|(er)) commence par a ou er ^[a-d] commence par a,b,c ou d [0-9] contient un chiffre ^[^a] ne commence pas par a ^(a)+ commence par un ou plusieurs a ^(a)? commence ou non par un a ^(a)* peut ou non commencer par a a{2} deux fois "a" a{2,} deux fois "a" ou moins a{2,4} deux, trois ou quatre fois "a"

Ces mtacaractres nous permettent donc de faire des combinaisons infinies pouvant correspondre tous les besoins. Nanmoins, pour vrifier des chanes de caractres de taille importante, l'criture de ces mtacaractres peut tre fastidieuse, en plus du fait que la chaine Regex n'est pas trs lisible pour le developpeur. Heureusement, il existe une srie d'alias permettant de faciliter cette tche :
-4Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

Alias \n \r \t \s \S \d \D \w \W \n \xn

Correspondance Caractre de nouvelle ligne Caractre de retour la ligne Caractre de tabulation Caractre d'espacement (espace, tabulation, saut de page, etc) Tout ce qui n'est pas un espacement Un chiffre Tout sauf un chiffre Un caractre alphanumrique Tout sauf un caractre alphanumrique Caractre en octal ex:\001 ==> " 1 " Caractre en hexadcimal ex: \x41 ==>" A "

Equivalence

[\f\n\r\t\v] [^\f\n\r\t\v] [0-9] [^0-9] [a-zA-Z0-9_] [^a-zA-Z0-9_]

1.3 - Exemples
Comme rien n'est plus parlant qu'un exemple concret, en voici quelque-uns qui dmontrent quel point les chanes Regex peuvent tre simples... ou complexes :) Chane qui contient des lettres de a d : [a-d] ou [abcd] Chane qui contient des lettres de a d ou n'importe quelles lettres majuscules : [a-dA-Z] Chane commenant (et finissant) par y ou z : ^(y | z)$ Chane ne contenant pas de chiffre : [^0-9] Chane contenant les chiffres 1 ou 2 ou le symbole ^ : [12\^]

On peut utiliser plusieurs mtacaractres : ^[pP]hara(onix)?$ : phara, Phara, pharaonix ou Pharaonix

Ou tout simplement vrifier la validit d'une adresse ip : ^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$

Note: Cette ligne de validation semble complexe mais dans une application, elle est la seule alternative une suite norme de substring() et comparaisons via les mthodes traditionnelles.

-5Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

2 - Les expressions rgulires et .Net


Les Regex s'utilisent normment sous UNIX avec PERL mais galement dans les langages web comme le PHP. Mme si la syntaxe de base est identique, l'utilisation de celle-ci diffre un peu pour chaque langage, notamment les mthodes qui sont diffrentes. Ainsi, nous ne verrons pas ici les fonctions POSIX comme ereg( ), mais nous nous intresserons uniquement aux mthodes propres aux langages .NET.

2.1 - Utilisation en .Net


Les Regex ncessitent l'utilisation de l'espace de noms System.Text.RegularExpressions
using System.Text.RegularExpressions;

En .Net, les Regex sont indiquer entre guillemets, si celles-ci comprennent des antislashs (" \ "), il faut alors les doubler. Nanmoins, il existe une astuce utile ici, qui consiste placer le symbole @ avant les guillemets. Ainsi : @"^[\t]$" est quivalent "^[\\t]$"

De plus, pour faciliter la vrification de vos Regex, je mets disposition un petit programme qui permettra galement de vrifier la validit des exemples que nous verrons par la suite. RegexMaker (32ko) Miroir

2.2 - Validation d'une chane


La validation d'une chane de caractres se fait grce la mthode IsMatch() qui retourne une valeur boolenne gale true si la chane correspond la Regex et false dans le cas contraire. Voici comme exemple, la mthode ValidMail() vrifie la validit d'une adresse mail passe en paramtre.
private bool ValidMail(string adresse) { System.Text.RegularExpressions.Regex myRegex = new Regex(@"^([\w]+)@([\w]+)\.([\w]+)$"); //([\w]+) ==> caractre alphanumrique apparaissant une fois ou plus return myRegex.IsMatch(adresse); // retourne true ou false selon la vrification }

Le fonctionnement de cette mthode consiste donc crer un objet Regex que l'on initialise avec notre expression, puis on passe cet objet la chane valider (ici la chaine adresse).

2.3 - Remplacement dans une chane


Une deuxime utilit des Regex est de pouvoir rechercher des occurrences de chanes spcifiques et de les remplacer par une autre chane. Dans ce cas prcis, nous utiliserons la mthode Replace(). Celle-ci est plus ou moins identique la mthode Replace() de l'objet string, mais cette dernire ne permet de remplacer qu'une seule chane de caractres par une autre. Prenons comme exemple, la mthode, SMS qui s'assure de remplacer certains termes par d'autres:
private string SMS(string chaine) { System.Text.RegularExpressions.Regex myRegex = new Regex("(lut|salut|yop)");

-6Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

return myRegex.Replace(chaine,"bonjour"); //renvoi la chaine modifie }

Cette fois ci, notre mthode remplacera toutes les occurrences des mots " lut ", " salut " et " yop " par le mot "bonjour". Note: avec cette mthode, il est possible de ne remplacer que les N premires occurrences en utilisant un paramtre supplmentaire : myRegex.Replace(chaine,"femme", N);// o N est un entier.

Il existe une subtilit des Regex qui consiste pouvoir rutiliser la chane rcupre via la Regex. La chane Regex peut tre modifie de faon ce que chaque motif correspondant un groupe de mtacaractres entre parenthses soit rcuprable et rutilisable par la suite. Ces regroupements sont donc raliss l'aide de "parenthses de capture" (capturing parentheses) et permettent d'extraire des chanes de caractres qui seront utilises pour la modification de la chane de caractres finale. Voici un exemple concret: la mthode ToHtmlMail qui rutilise une partie de la chane de dpart, extraite grce la chane Regex:
private string ToHtmlMail(string adresse) { Regex myRegex = new Regex(@"([\w\-.]+@[\w\-.]+)"); return myRegex.Replace(adresse, "<a href=\"mailto:$1\" >$1a>"); }

Dans cette mthode, on ajoute les balises html mailto autour de l'adresse mail dtecte. Ainsi, en passant la mthode la chane "contactez moi via [email protected]", elle devient "contactez moi via <a href="mailto:[email protected]">[email protected]</a>". L'alias $1 reprsente la premire chane rcupre par la Regex: ([\w\-.]+@[\w\-.]+) On aurait pu utiliser $2 si la chaine Regex de base tait de la forme ([\w\-.]+)@([\w\-.]+). Voici le schma reprsentant le cas de figure avec une chaine Regex 2 groupements (parenthses) et les parties de la chaine analyse, qui sont rcupres:

Il est galement possible d'utiliser une forme contracte : Regex.Replace(adresse,"([\w\-.]+@[\w\-.]+)","<a href=\"mailto:$1\" >$1<a>") qui consiste indiquer galement l'expression de vrification.

2.4 - Dcoupage dans une chane

-7Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

2.4.1 - Dcoupage par sparateur


Grce aux Regex, il est galement possible de dcouper une chane de caractres de diffrentes manires. La premire mthode est la mthode Split() qui gnre un tableau de chanes de caractres en dcoupant une chane de dpart via un sparateur : mais ici, nous pouvons dclarer des sparateurs dynamiques. Voici comme exemple, la mthode Splitter() qui dcoupe une chane caractres en plusieurs chanes dont les sparateurs sont des chiffres
private string[] Splitter(string chaine) { Regex myRegex=new Regex(@"\d+"); return myRegex.Split(chaine); }

En lui passant la chane "Voici3234un2exemple23423427de2chane3424de767caractres"; elle renverra un tableau contenant {Voici, un, exemple, de, chane, de, caractres}

2.4.2 - Dcoupage par regroupement


La deuxime mthode permet galement de ranger dans un tableau, diffrents lments "extraits" de la chane de caractres travailler. Puis une astuce permet de rutiliser ces lments "extraits" selon les besoins que l'on a d'eux. Voici donc une mthode qui va renvoyer un tableau des informations concernant le serveur partir de son chemin LDAP, puis raffiche les rsultats. Vous noterez que nous utilisons ici encore les "parenthses de capture" (cf chapitre prcdent) afin de grouper les diffrents motifs rcuprer.
Regex myRegex=new Regex(@"^LDAP://CN=([\w]+), CN=([\w]+), DC=([\w]+), DC=([\w]+)$"); Match m= myRegex.Match("LDAP://CN=moderateurs, CN=pharaonix, DC=com, DC=developpez"); if(m.Success) { MessageBox.Show("Utilisateur: " + m.Groups[2].Value); MessageBox.Show("Groupe: " + m.Groups[1].Value); MessageBox.Show("Serveur: " + m.Groups[4].Value+"."+m.Groups[3].Value); }

-8Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

Conclusion
Nous avons donc vu qu'il existe diffrentes manires d'utiliser les Regex, et que malgr leur aspect complexe au premier abord, elles ont pour but la simplification du travail sur les chanes. Il est ainsi trs facile de vrifier la validit d'une chane et d'en ressortir les erreurs et/ou de les corriger. J'espre que vous saurez maintenant comprendre le fonctionnement des expressions rationnelles et que vous saurez les utiliser bon escient, quelque soit le langage choisi.

-9Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Utilisation des expressions rgulires en .Net par MORAND Louis-Guillaume

Liens
Je joins galement les sources des codes transcrits en Delphi par Laurent DARDENNE: Sources Delphi

Voici quelques liens utiles en rapport avec les expressions rgulires: Article sur les Regex et Java (Hugo Etievant) Article sur les Regex et php (Hugo Etievant) Site complet sur les diffrentes utilisations des Regex Outil de Regex Des centaines de chanes Regex toutes faites

Un remerciement tout spcial Laurent DARDENNE pour tout le temps qu'il a pass m'aider amliorer cet article ainsi qu' Emerica pour ses corrections et remarques constructives.

- 10 Les sources prsents sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 - MORAND Louis-Guillaume. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://lgmorand.developpez.com/

Vous aimerez peut-être aussi