_ _____________________________________ _ -4- `^°*;:,.> Expressions régulieres <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯symbioz¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 18/4/2002 Les Expressions regulieres. Qu'est-ce qu'une expression réguliere ? Nommée également Regular Expression (RegExp), une expression réguliere permet de caractériser le format d'une chaine de caractere. Plus précisément, une expression réguliere est un motif ou une série de motifs de caracteres comparé à une chaine de caractere. Le but étant de rechercher ou de remplacer un motif dans une chaine de caractere. Cet article n'a rien d'extraordinaire, si vous connaissez les expressions regulieres, si vous savez vous en servir, c'est inutile de le lire. Néanmoins, certains ne savent pas ce qu'est une expression reguliere, certains ne connaissent meme pas leur existence. C'est apres avoir fait ce constat que j'ai pris mon courage a 2 pieds et que j'ai decider d'ecrire cet article. Retrouver ce que vous voulez dans un texte (mot, phrase, ponctuation, etc), rien de plus simple grace a ce que l'on appelle les expressions regulieres. Elles sont utilisable en PHP, autant qu'en perl et meme en ligne de commande ! Il en existe des tas (sisi je l'jure). Une expression reguliere a l'origine ne ressemble strictement a rien. Exemple: (*.?). Ca vous dit quelque chose ? Non, c'est pas grave, on traitera dans ce tutorial une grande partie des caracteres les plus courant pouvant vous aider a construire vos expressions regulieres. Chaque caractere sera detaillé et aura des exemples donc pas de panique. On va commencer par les caracteres les plus simples et les plus utiles (ca veut pas dire que ceux de la fin sont inutiles :)). - Les caracteres ^ et $. Ce sont les deux caracteres élémentaires aux expressions regulieres : Caractere Fonction(s) ^ Definit le debut d'une chaine de caracteres. $ Defini la fin d'une chaine de caracteres. EXEMPLES: ^oiseaux : Cette exemple definit une chaine de caracteres commençant par "oiseaux". oiseaux$ : Celle-ci definit une chaine de caratere terminant par "oiseaux". ^oiseaux$ : Et enfin, cette derniere defini une chaine de caracteres qui commence ET se termine par "oiseaux". -------------------------------------------------------------------------------- - Les caracteres * , + et ? : Caractére Fonction(s) * Zero ou Plusieurs + Un ou Plusieurs ? Un ou Zero EXEMPLES: abc* : Cet exemple definit une chaine de caracteres qui contient "ab" suivi de rien ou #de plusieurs "c".=> ab, abc, abcc...etc... abc+ : Cet exemple definit une chaine de caracteres qui contient "ab" suivi MINIMUM de un "c".=>abc, abccc...etc.. abc? : Cet exemple definit une chaine de caracteres qui contient "ab" suivi de RIEN ou un "c" mais RIEN D'AUTRE.=> ab , abc. C'est TOUT! - Les caracteres d'accolades { }: Les 2 caracteres vont ensemble. Ils servent tout simplement a donner une limite de chiffres derriere la chaine de caracteres. Vous comprenez mieux en lisant l'exemple ci dessous : abc{5}: Cette exemple definit une chaine de caracteres qui contient "ab" suivi de 5 "c". =>abccccc. abc{3}: Cette exemple definit une chaine de caracteres qui contient "ab" suivi de 3 "c". =>abccc. On peut aussi ajouter la virgule aux accolades ",": La virgule sert a donner une infinité de chiffres derriere la chaine de caracteres. abc{2,} : Cet exemple definit une chaine de caracteres "ab" suivi de AU MOINS 2 "c".=> abcc, abccc, abccccccccccc....etc.... Definissons tout de même un "maximum" derriere la virgule. abc{5,10) : Cet exemple defini une chaine de caracteres "ab" suivit de 5 à 10 "c". => abccccc, abcccccccccc, abcccccccc...etc... - Les caracteres parentheses (): Jusqu'a maintenant, on a toujours choisi un seul caractere derriere une chaine. Les parentheses servent selectionner une sequence de caracteres. a(lo)*: Cet exemple definit une chaine de caracteres qui contient "a" suivi de zero, un ou plusieur "lo". => a, alo, alolo, alololo, alolololo...etc... - La barre | (AltGr-6) Ce caractere contient simplement un operateur OU. Exemple : "un|le": chaine qui contient "un" ou "le" "(une|la) voiture": chaine qui contient "la voiture" ou "une voiture" "(a|b)*": chaine qui contient une suite de "a" ou de "b". - Le caractere .(point). Ce caractere cherche n'importe quel caractere 1 fois. Exemple: ^L. : Cette chaine contient un L suivi de n'importe quel caractere 1 fois => Le, La, Les etc...etc... Les crochets [], tirets - et accents circonflexe ^. Ces 3 caracteres sont independants les uns des autres mais je vais les expliquer en meme temps pour donner des exemples concrets : Les crochets definissent une chaine de caracteres AUTORISÉS ou INTERDITS : [tahc] contient une chaine de caracteres contenant un "t", un "a", un "h" et/ou un "c". En revanche, pour faciliter une recherche de caracteres et pour ne pas enumerer tout l'alphabet, vous pouvez utilisez le caracteres "-". [a-i] contient une chaine de caracteres allant de "a" a "i". Enfin, vous pouvez tout simplement INTERDIRE des caracteres dans une chaine en utilisant "^". Vive le [^fn] Contient une chaine de caracteres REFUSANT SYSTEMATIQUEMENT les lettres "f" et "n". (et tant mieux=)) Attention : Pour rechercher un caractere special. Il faut le faire preceder d'un antislash. Sauf s'il est entre crochets[]. En effet, tout caracteres ou chaine de caracteres represente ce qu'il est. Donc inutile de mettre des antislash. Et pour terminer, nous allons traiter "les classes des caracteres". Elles servent a rechercher des "types" de caracteres sans avoir à tous les enumerer. Pour faire ceci le plus simplement possible je vous les enumere dans un tableau. Les classes de caracteres [:blank:] - [ x09] Espaces ou tabulations [:alpha:] - [A-Za-z] Caracteres alphabetiques [:digit:] - [0-9] Caracteres numeriques [:alnum:] - [A-Za-z0-9] Caracteres AlphaNumerique [:punct:] - [!-/:-@[-'{-~] Caracteres de ponctuation. [:graph:] - [!~~] Caracteres affichables et imprimables [:space:] - [ t v f] Tous types d'espaces [:punct:] - [!-/:-@[-'{-~] Caracteres de ponctuation [:print:] - [~~] Caracteres imprimable(sauf zones de controle). [:lower:] - [a-z] Caracteres en minuscules [:upper:] - [A-Z] Caracteres en majuscules [:xdigit:] - [0-9a-fA-F] Caracteres hexadécimal Pour vous donner un exemple CONCRET de ce que vous pouvez faire avec les expressions regulieres, observez la portion de code en php suvante : /script>", " " , $var); /* La fonction ereg replace sert a remplacer un caractere ou une chaine de caracteres par ce que l'on veut. Dans cet exemple, nous utilisons l'expressions reguliere pour remplacer par un BLANC tout les JavaScript qui se trouvent sur la page http://www.monsite.com/index.htm. Ceci permet de recuperer la page index du site en supprimant tous les javascripts. */ echo $supprime ?> symbioz@madchat.org