1 Codage de texte et Expressions régulières 9 juillet 2008 Codage de texte et E
1 Codage de texte et Expressions régulières 9 juillet 2008 Codage de texte et Expressions régulières Sommaire Codage de texte et Expressions régulières .......................................................................................... 1 1 Introduction ..................................................................................................................................... 2 2 Les expressions régulières ............................................................................................................... 3 2.1 Les méta-caractères des expressions régulières ..................................................................... 5 2.2 Le Backreferencing .................................................................................................................. 8 2.3 Les Regex et le .NET Framework ............................................................................................. 9 2.3.1 Les méthodes de comparaison ...................................................................................... 10 2.3.2 La méthode de remplacement ...................................................................................... 12 2.3.3 Obtention de sous chaines ............................................................................................ 14 3 Codage et décodage de texte ........................................................................................................ 15 3.1 L'histoire des tables de codages ............................................................................................ 16 3.2 Le codage dans le .NET Framework ....................................................................................... 17 3.3 Utilisation des classes de codage .......................................................................................... 17 3.4 Le Codage et les flux .............................................................................................................. 20 4 Conclusion ..................................................................................................................................... 21 2 Codage de texte et Expressions régulières 9 juillet 2008 1 Introduction Dans les chapitres précédents, nous avions vu les bases du Framework ainsi que les différentes manières d'accéder à des données. Dans ce chapitre, nous allons voir comment nous pouvons effectuer des recherches ou des remplacements dans des chaînes de caractères en utilisant une méthode de recherche par prototype. Ce procédé de recherche est utile lorsqu'on souhaite filtrer des données aux provenances non sûres (saisie de texte des utilisateurs par exemple) ou juste pour transformer des portions de texte. Nous verrons également comment sont représentés les caractères des différentes langues en informatique. Ceci permettant l'interopérabilité des textes et de conserver l’intégrité des données. 3 Codage de texte et Expressions régulières 9 juillet 2008 2 Les expressions régulières Imaginons que nous créons un nouveau projet dans lequel l'utilisateur peut saisir des informations dont son adresse email par exemple. Nous pourrions vérifier la validité de son adresse via le code suivant: Ce code fonctionne dans ce cas: Entrez votre adresse email : kikoo@lol.fr Adresse email valide Mais également dans ces cas là: Entrez votre adresse email : lol@ Adresse email valide Entrez votre adresse email : @ Adresse email valide Le code nous indique qu'il s'agit d'adresse email valide alors qu'en réalité, elles ne le sont pas du tout. En réutilisant le code ci-dessus, nous pourrions ajouter un test afin de vérifier si la chaîne de caractères contient également un point. Mais le problème reste entier puisqu'une adresse telle que "43-è_ç@.kl^ù" ou encore "@." fonctionnerait également. Si nous devions ainsi tester toutes les formes d'adresses email possibles et imaginables, nous perdrions beaucoup de temps et de performance à l'exécution. Pour éviter ces test successifs, les développeurs Unix et Perl utilisent depuis longtemps ce qu'on appelle les expressions régulières (Ou "Regex" en raccourci). Les regex permettent, non plus de tester si une chaîne contient ou non un ou plusieurs caractères, mais de vérifier si une chaîne de caractères concorde avec un "prototype" de chaîne de caractères. Par exemple, si on traduit le code présenté ci-dessus, nous pourrions dire "si la chaîne de caractères contient un @ ". 'VB Sub Main() Console.WriteLine("Entrez votre adresse email :") Dim valeur As String = Console.ReadLine() If (valeur.Contains("@")) Then Console.WriteLine("Adresse email valide") Else Console.WriteLine("Adresse email NON valide") End If Console.Read() End Sub //C# static void Main(string[] args) { Console.WriteLine("Entrez votre adresse email :"); string valeur = Console.ReadLine(); if (valeur.Contains("@")) Console.WriteLine("Adresse email valide"); else Console.WriteLine("Adresse email NON valide"); Console.Read(); } 4 Codage de texte et Expressions régulières 9 juillet 2008 Avec les regex, nous pourrions effectuer un test beaucoup plus complet qui se traduirait par : "si la chaîne de caractères commence par un maximum de 12 caractères alphanumériques, suivis du symbole @, lui-même suivi par une suite de 5 lettres au maximum, également suivie d'un point et se terminant par 3 lettres au maximum" et le tout en une seule ligne (ne vous occupez pas de la signification des caractères pour le moment): Cette fois-ci, si nous testons à nouveau les adresses précédentes, nous obtiendrons: Entrez votre adresse email : kikoo@lol.fr Adresse email valide Entrez votre adresse email : lol@ Adresse email NON valide Entrez votre adresse email : abcdefghijklmnop@free.lol Adresse email NON valide Seule la première adresse rempli tous les critères à remplir pour concorder avec la forme de chaîne de caractères que l'on souhaite tester. Les expressions régulières permettent de faire beaucoup plus (notamment sur le web où elles permettent de créer du pseudo-code (BBCode) afin de faciliter le traitement de texte sur les forums ou les blogs). Cependant, vous aurez vite remarqué qu'elles ne sont pas très simples à écrire et encore moins simples à décrire. Il est important ici de comprendre que, par défaut, les expressions régulières sont sensibles à la casse, c'est-a-dire qu’elles font la différence entre les lettres majuscules et minuscules. (‘a’ et ‘A’ ont une casse différente). 'VB Imports System.Text.RegularExpressions Sub Main() Console.WriteLine("Entrez votre adresse email :") Dim valeur As String = Console.ReadLine() If (Regex.IsMatch(valeur, "^(\w{1,12})@([a-z]{1,5})\.([a- z]{1,3})$", RegexOptions.None)) Then Console.WriteLine("Adresse email valide") Else Console.WriteLine("Adresse email NON valide") End If Console.Read() End Sub //C# static void Main(string[] args) { Console.WriteLine("Entrez votre adresse email :"); string valeur = Console.ReadLine(); if (Regex.IsMatch(valeur, @"^(\w{1,12})@([a-z]{1,5})\.([a-z]{1,3})$", RegexOptions.None)) Console.WriteLine("Adresse email valide"); else Console.WriteLine("Adresse email NON valide"); Console.Read(); } 5 Codage de texte et Expressions régulières 9 juillet 2008 2.1 Les méta-caractères des expressions régulières Vous aurez pu constater grâce au code ci-dessus, que les expressions régulières sont construites grâce à une chaîne de caractères (un prototype) dont chaque caractère a une spécification particulière qui est indiquée dans ces tableaux. Dans la mesure du possible, chaque caractère sera illustré par un exemple rapide : Caractères de positionnement des recherches Caractère Description ^ Indique le début de la chaîne de caractères (Ex: "^a" concordera avec n'importe quelle chaîne de caractères commençant par la lettre "a"). Sur une chaîne multi ligne, indique le début de n'importe quelle ligne. $ Indique la fin de la chaine de caractères (Ex: "a$" concordera avec n'importe quelle chaîne de caractères se terminant par un "a"). Sur une chaîne multi ligne, indique la fin de n'importe quelle ligne. \A² Indique que la recherche doit commencer sur le premier caractère de la chaîne. Les retours à la ligne sont ignorés (Ex: "\A^a" concordera uniquement si le premier caractère de la première ligne de la chaîne de caractères est un "a"). \Z² Indique que la recherche doit commencer sur le dernier caractère de la chaîne ou le dernier caractère situé avant un \n1 terminal. Les retours à la ligne sont ignorés (Ex: "a$\Z" concordera si les derniers caractères de la dernière ligne de la chaîne de caractères sont "a" ou "a\n"). \z² Indique que la recherche doit commencer sur le dernier caractère de la chaîne. Les retours à la ligne sont ignorés (Ex: "a$\z" concordera uniquement si le dernier caractère de la dernière ligne de la chaîne de caractères est "a"). \G² Spécifie que la recherche débute là où la précédente recherche s'est arrêtée. Utilisée avec Match.NextMatch(), cela garantie qu'on ne saute aucune occurrence du prototype recherché. \b² Spécifie une recherche de mots composés de caractères alpha-numériques (Ex: "\bje\b" concordera uniquement si la chaîne de caractères contient le mot "je" séparé à droite et à gauche par des caractères non-alphanumériques). \B² Spécifie une recherche de morceaux de mots (Ex: "\Bjour\B" concordera uniquement si la chaîne de caractères contient le mot "jour" entouré à droite et à gauche par des caractères alphanumériques. 1 : Le caractère \n indique un retour à la ligne. En VB.NET, il s'agit du caractère vbLf (pour VB Line Feed) 2 : En C#, vous serez obligé de précéder vos prototypes de regex par le symbole @. De cette façon, s'ils contiennent un backslash, ils seront interprétés comme des caractères normaux et pas comme un caractère d'échappement. 6 Codage de texte et Expressions régulières 9 juillet 2008 Caractères spéciaux Caractère Description \a Indique le caractère d'alarme (code Unicode: 0x0007). \b Indique le caractère de retour en arrière (code Unicode: 0x0008) uniquement s'il est utilisant dans un ensemble []. \t Indique le caractère de tabulation (code Unicode: 0x0009). \r Indique le caractère de retour chariot (code Unicode: 0x000D). \v Indique le caractère de tabulation verticale (code Unicode: 0x000B). \f Indique le caractère de défilement de ligne (code Unicode: 0x000C). \n Indique le caractère de retour à la ligne (code Unicode: 0x000A). \e Indique le caractère d'échappement (code Unicode: 0x001B). \040 Représente un caractère de la table ASCII en représentation octale (les 3 octets sont obligatoires). Ici, \040 représente un espace. \x20 Représente un caractère de la table ASCII en représentation hexadécimale (les 2 valeurs sont obligatoires). Ici, \x20 représente aussi un espace. \cC Représente un caractère de contrôle ASCII. Ici, \cC représente la combinaison de touches "CTRL+C". \u0020 Représente un caractère de la table Unicode en représentation hexadécimale (les 4 valeurs sont obligatoires). \u0020 code aussi pour un espace. \ Lorsqu'on souhaite rechercher un caractère d'expression régulière, permet d'indiquer à la Regex de ne pas traiter le caractère suivant en tant que prototype mais en tant que caractère normal (Ex: "\\" représente le caractère "\"). C'est le caractère d'échappement. . Indique n'importe quel caractère excepté un \n Quantificateurs Caractère Description {x} Spécifie que le caractère précédent doit apparaître x uploads/s3/ 1-2-codage-de-texte-et-expressions-regulieres.pdf
Documents similaires
-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 01, 2021
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 1.1443MB