Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
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.
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;
+ @"[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.
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.