Está en la página 1de 4

Expression rgulire | Expression rationnelle (C#)

by Fabien Lavocat 1. November 2007 03:06 Qu'est ce qu'une expression rgulire, comment l'crire, comment l'utiliser en .NET ? Voil les questions que nous aborderons dans cet article.

Expression rgulire, expression rationnelle


Une expression rgulire ou expression rationnelle (Anglais : regular expression) est une chane de caractres permettant de d'crire un ensemble de chanes de caractres selon une syntaxe dont nous verrons les spcificits dans le chapitre suivant. Vous trouverez les abrviations regex ou regexp tout au long de cet article ainsi que sur les diffrents sites de dveloppements. Elles sont utilises dans plusieurs cas :

Les shells UNIX les utilisent pour faire des cherches de fichiers. Vrifier la forme d'une chane de caractres. C'est--dire vrifier si une chane caractres saisie par un utilisateur est correcte par rapport ce que l'on attend. Par exemple un utilisateur saisie une adresse email et grce une expression rgulire, on peut vrifier que cette adresse est syntaxiquement correcte. Il est galement possible d'effectuer des traitements sur des chanes de caractres, comme remplacer un morceau de cette dernire par un autre, dcouper cette chane...

La syntaxe
Les mtacaractres
Symbole Signification ^ Correspond un dbut de chane. $ Correspond une fin de chane. \ Correspond un caractre d'chappement. . Correspond n'importe quel caractre. | Correspond un des termes spars par le caractre |. () Correspond un groupement. Correspond une intervalle de caractres. [] Correspond un ensemble de caractres. [^] Correspond tout sauf l'ensemble de caractres. + Une fois ou plus.

? * {x} {x,} {x,y}

Zro ou une fois. Zro ou plusieurs fois. x fois exactement (O x est un nombre). x fois ou moins (O x est un nombre). Entre x et y fois (O x et y sont des nombres).

Grce ces mtacaractres, il est possible de faire une infinit de combinaisons pour adapter nos besoins.

Les caractres d'chappement


Le caractre d'chappement \ (backslash) indique que le caractre situ aprs le backslash n'est pas un oprateur mais un caractre Unicode. Caractre d'chappement \t \r \v \f \n \040 \x20 \cC \u0020 \ \w \W \s \S \d \D Description Correspond une tabulation. Correspond un retour chariot. Correspond une tabulation verticale. Correspond un dfilement de ligne. Correspond une nouvelle ligne. Correspond un caractre ASCII cod sous la forme Octale (Maximum 3 chiffres). Ici le caractre \040 reprsente un espace. Correspond un caractre ASCII en utilisant sa reprsentation hexadcimale (code sur deux chiffres). Correspond un caractre de contrle ASCII. Ici le caractre \cC correspond Ctrl-C. Correspond un caractre Unicode reprsent sous sa forme Hexadcimale (codage sur quatre chiffres). Ici \u0020 correspond un espace. Reprsente, lorsque ce caractre d'chappement est suivi d'un caractre non identifi comme caractre d'chappement, le caractre par lui-meme. Correspond n'importe quel caractre alphabtique. Correspond n'importe quel caractre non alphabtique. Correspond tout caractre espace blanc. Correspond tout caractre autre qu'un espace blanc. Correspond n'importe quel chiffre dcimal. Correspond un caractre ne reprsentant pas un chiffre.

Exemple 1 : Adresse email

Comme vous le savez srement, une adresse email est compose en 4 parties :

La partie de gauche : Nom du propritaire de l'adresse (Compos de caractres alphanumrique et d'ventuels '.', '-') Le caractre @ Le sous-domaine (Eventuel) et le domaine (Compos de caractres alphanumrique et d'ventuels '.', '-') Un point '.' puis l'extention de domaine (entre 2 et 4 caractres).

Donc pour la premire partie, nous devons avoir : "[a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*" Pour la seconde : "@" Ensuite pour les ventuels sous-domaine et le nom de domaine : "[a-zA-Z0-9]+(\.[a-zA-Z0-9-]+)*" Enfin pour l'extention de domaine : "\.[a-z]{2,4}" Il ne faut pas oublier qu'une expression rgulire commence par un ^ et termine par un $. Nous avons donc pour vrifier une adresse email l'expression suivante : ^[a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*@[azA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-z]{2,4}$ Bien sr cette expression peut tre amliore en dfinissant en dur toutes les extensions de domaines...

Exemple 2 : Adresse IP
Une adresse IP est compose de 4 blocs de 1 3 chiffres spars par des ".". Donc : xxx.xxx.xxx.xxx Les nombres allant de 1 254 (255 pour les masques de rseaux, sous-rseaux) L'expression rgulire pour une adresse IP sera donc : ^(25[0-4]|2[0-4]\d|[0-1]?\d?\d)(\.(25[04]|2[0-4]\d|[0-1]?\d?\d)){3}$

Utilisation en .NET
Le namespace System.Text.RegularExpressions
La technologie .NET utilise des librairies accessibles grce aux espaces de nom (Anglais : namespaces). Pour les expressions rgulires, nous utilisons le namespace System.Text.RegularExpressions. Donc avant de commencer coder, n'oubliez pas d'importer ce namespace : using System.Text.RegularExpressions;

Validation d'une chane


Validation d'une adresse eMail en C#
Afin de valider ou non une adresse email, nous allons crer une fonction IsEmail() qui nous retournera un boolen qui sera fonction de la validation de l'adresse.
1: static Boolean IsEmail(String address) 2: { 3: String pattern = @"^[a-zA-Z0-9_+-]+(\.[a-zA-Z0-9_+-]+)*" 4: + @"@"

5: 6: 7: 8: 9: 10: 11: 12: }

+ @"[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*" + @"\.[a-z]{2,4}$"; // Cration de note Objet de type System.Text.RegularExpressions.Regex // Le constructeur nous demande le pattern de lexpression rgulire Regex regex = new Regex(pattern); // On retourne un rsultat pour notre chane address grace la fonction IsMatch() return regex.IsMatch(address);

Vous noterez que j'ai utilis des @ devant l'expression rgulire car celle-ci contient des \ qui sont des caractres d'chappement pour les chanes de caractres. Vous pouvez donc soit les doubler \\ soit utiliser un @ devant la chane. Nous utilisons la fonction IsMatch() de l'objet System.Text.RegularExpressions.Regex afin de savoir si la chane que nous lui passons en paramtre est syntaxiquement correcte par rapport l'expression rgulire que nous avons pass en paramtre du constructeur. Si nous passons la chane "fabien.lavocat@blog-microsoft.fr" notre fonction, elle nous retournera : True. Avec la chane ".lavocat@blog-microsoft.fr", la fonction nous retourne : False.

Validation d'une adresse IP en C#


Afin de valider ou non une adresse IP, nous allons crer une fonction IsIP() qui nous retournera un boolen qui sera fonction de la validation de l'adresse.
1: static Boolean IsIP(String address) 2: { 3: String pattern = @"^(25[0-4]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-4]|2[0-4]\d|[0-1]?\d?\d)){3}$"; 4: // Cration de note Objet de type System.Text.RegularExpressions.Regex 5: // Le constructeur nous demande le pattern de lexpression rgulire 6: Regex regex = new Regex(pattern); 7: // On retourne un rsultat pour notre chane address grce la fonction IsMatch() 8: return regex.IsMatch(address); 9: }

Nous utilisons la fonction IsMatch() de l'objet System.Text.RegularExpressions.Regex afin de savoir si la chane que nous lui passons en paramtre est syntaxiquement correcte par rapport l'expression rgulire que nous avons pass en paramtre du constructeur. Si nous passons la chane "192.168.1.18" notre fonction, elle nous retournera : True. Avec la chane "255.255.255.255", la fonction nous retourne : False.

También podría gustarte