Le mot « COMPLEX » écrit avec les mots « SIMPLE »

Expressions rationnelles

Les expressions rationnelles, parfois appelées expressions régulières (ou encore regex ou regexp de l’anglais regular expressions) est un langage informatique développé dans les années 1940 et 50 destiné à manipuler les chaînes de caractères. Très compactes et très puissantes, elles permettent de décrire des chaînes de caractères très complexes en une quantité réduite de caractères.

Exemples d’utilisation

La définition des expressions rationnelles n’est pas intuitive et leur usage est essentiellement cantonné aux outils destinés aux informaticiens, qu’il s’agisse d’éditeurs de textes ou d’outils de manipulation de chaînes de caractères en ligne de commande fréquemment utilisés sous UNIX. En matière de développement web, l’usage des expressions rationnelles permet notamment de vérifier la validité des données entrées par les utilisateurs, ou encore de filtrer le spam.

L’identification des adresses email correctement formulés, peut être réalisé sous cette forme compacte relativement permissive, mais aussi assez lisible :

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|biz|info|name|aero|biz|info|jobs|museum)$

ou bien encore sous cette forme plus exhaustive et plus stricte, mais aussi très peu lisible :

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 

Cette autre expression rationnelle permet d’identifier plusieurs centaines de milliers de façons d’écrire le mot « Viagra » :

\b((V|v|\\/)+([\W]*[\w]{0,2}[\W]*)(I|i|1|l|\||ï|ì|:|Ì|Î|Í|Ï|y|Y)*([\W]*[\w]{0,2}[\W]*){0,2}(A|a|@|/\\|á|à|â|ã|ä|å|æ|À|Á|Â|Ã|Ä|Å)+([\W]*[\w]{0,3}[\W]*)(G|g|6|9){1,4}([\W]*[\w]{0,3}[\W]*)(R|r|®){0,4}([\W]*[\w]{0,2}[\W]*)(A|a|@|/\\|á|à|â|ã|ä|å|æ|À|Á|Â|Ã|Ä|Å)+)\b

Documentation

Une excellente source de documentation est le site Regular-Expressions.info. Très didactique et orienté vers la pratique, ce site propose divers exemples d’expressions rationnelles communément utilisées dans les applications web, notamment.

Une autre source utile d’informations en matière d’expressions rationnelles est le site RegExLib.com qui regorge d’exemples d’expressions rationnelles classés, commentés et notés par les utilisateurs du service, en plus d’un testeur en ligne permettant de tester des expressions rationnelles avec les moteurs .Net (côté serveur), JavaScript (côté client) et VBScript (côté client).

Un excellent outil en ligne pour tester les expressions rationnelles est le site REGex TESTER permettant de tester ses expressions rationnelles en JavaScript (côté client en cours de frappe), Preg (côté serveur) et Ereg (côté serveur).

Conclusion

Les expressions rationnelles ont beau être fort puissantes, elles n’en demeurent pas moins peu intuitives pour le commun des mortels. Néanmoins, pour les informaticiens trouvant le temps d’apprendre à les maîtriser, leur utilisation permet un gain de temps non négligeable dans le développement d’applications manipulant les chaînes de caractères en général et les applications web en particulier.

Crédit image : OpenClipart, license Domaine public

2 réflexions sur « Expressions rationnelles »

  1. MartinMartin Auteur de l’article

    Une expression rationnelle qui détecte les balises HTML serait celle-ci :

    <[\s]*/?[\s]*[a-zA-Z]+\b[^>]*>

    Ceci si l’on suppose qu’une balise HTML est construite ainsi :

    • début par < et fin par > ;
    • d’éventuels espaces (j’ignore si ces espaces sont autorisés, cependant, dans une balise correctement formée) ;
    • un éventuel / qui indique une balise de fin ;
    • à nouveau, d’éventuels espaces ;
    • un ou plusieurs caractères, en minuscules ou en majuscules, pour le nom de la balise ;
    • séparés de la suite par un caractère de fin de mot ;
    • suivis d’éventuelles options, de longueur variable.

    Ainsi, cette expression rationnelle nous permet de capturer des balises HTML telles que :

    • <body>
    • <p class="paragraph">
    • </em>

    Cette expression rationnelle ne vérifie cependant pas la validité des balises. Ainsi, la balise < / blockquote class="oops" > serait considérée, à tort ou à raison, comme valide.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.