Créée le, 19/06/2015

 Mise à jour le, 12/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Localisation de Sous-Chaînes dans des Chaînes, strstr(), strchr(), strrchr(), stristr(), strpos(), strrpos(), str_replace, substr_replace(), Introduction aux Expressions Régulières (2ème partie) :



Localisation et remplacement de sous-chaînes au moyen de fonctions de traitement de chaîne :

Il arrive fréquemment qu'il faille rechercher une sous-chaîne particulière dans une chaîne plus longue. Etablir de type de correspondance partielle est souvent plus utile qu'un simple test d'égalité.

Dans notre exemple de formulaire de courrier électronique, nous devons déterminer si certains mots clés sont contenus dans le message transmis par le client, pour en déduire le service vers lequel doit être dirigé le message. Par exemple, nous pourrions décider de transmettre au service de vente au détail tous les messages relatifs aux différentes boutiques de chez Jean-Pierre. Nous pourrions alors classer dans cette catégorie de message tous les e-mails contenant le mot "boutique".

Pour opérer cette sélection, nous pourrions utiliser explode() ou strtok() pour identifier les différents mots composant chaque message reçu, en comparant ensuite ces mots à notre critère de sélection (par exemple, le mot "boutique") au moyen de l'opérateur d'égalité ou de la fonction strcmp().

PHP nous offre toutefois la possibilité d'aboutir au même résultat via un simple appel d'une des fonctions de comparaison de chaînes ou d'expressions régulières. Ces fonctions sont destinées à la localisation d'un motif donné dans une chaîne de caractères. Nous allons à présent passer, en revue chacun de ces jeux de fonctions disponibles.

Localisation de sous-chaînes dans des chaînes ; strstr(), strchr(), strrchr(), stristr() :

Pour localiser une chaîne au sein d'une autre chaîne, vous pouvez utiliser l'une ou l'autre des fonctions strstr(), strchr(), strrchr(), ou stristr().

La fonction strstr() est la plus générique, et peut être utilisée pour déterminer s'il existe une correspondance entre une sous-chaîne ou un caractère et une chaîne plus longue. Notez qu'en programmation PHP, la fonction strchr() est identique à la fonction strstr(), bien que son nom suggère qu'elle sert à localiser un caractère au sein d'une chaîne (ce qui est bien le cas en programmation C). En réalité, en PHP, la fonction strchr() permet tout autant de localiser un caractère qu'une chaîne de caractères au sein d'une autre chaîne.

Le prototype de la fonction strstr() est le suivant :

    string strstr (string botte_de_paille, string aiguille) ;

La fonction strstr recherche dans la botte_de_paille qui lui est passée comme premier argument s'il existe l'aiguille qui lui est fournie comme deuxième argument. Lorsque strstr() établit qu'il existe une correspondance exacte entre l'aiguille et la botte_de_paille, elle renvoie la part de la botte_de_paille à partir de l'aiguille localisée. Dans le cas contraire, strstr() renvoie la valeur false. Lorsque plusieurs occurrences de la sous-chaîne recherchée sont détectées, strstr() renvoie la part de la chaîne qui commence à la première occurrence de l'aiguille.

Par exemple, dans le cadre de notre application modèle, nous pouvons choisir le destinataire vers lequel un message reçu doit être dirigé, en utilisant le code suivant :

    $Votre_Adresse_Mail = "responsable_informatique_Jean_Pierre@orange.fr" ; // La valeur par défaut

    // Modifie $Votre_Adresse_Mail si le critère de sélection est satisfait

    $Retour_Information = " " ;

    if (strstr($Retour_Information, "boutique"))

    $Votre_Adresse_Mail = "responsable_entrepot@orange.fr" ;

    elseif (strstr($Retour_Information, "livraison"))

    $Votre_Adresse_Mail = "responsable_livraison.Jean@orange.fr" ;

    elseif (strstr($Retour_Information, "facture"))

    $Votre_Adresse_Mail = "responsable_comptabilité@orange.fr" ;

Ce code examine si le message contient certains mots clés, et transmet le message à la personne appropriée. Par exemple, si le message d'un client contient la phrase suivante : "Je n'ai toujours pas reçu la livraison de ma dernière commande", la chaîne livraison sera détectée, et le message sera transmis au responsable_livraison.Jean@orange.fr.

Il existe deux variantes de la fonction strstr(). La première variante, stristr(), est presque identique à strstr(), si ce n'est qu'elle n'est pas sensible à la casse. Elle serait très utile dans l'exemple considéré ici, puisque les données saisies par le client peuvent tout autant contenir des majuscules que des minuscules.

La deuxième variante de la fonction strstr() est strrchr(), qui elle aussi quasi identique à strstr(), excepté qu'elle renvoie la botte_de_paille à partir de la dernière occurrence de l'aiguille.

Détermination de la position d'une sous-chaîne dans une chaîne ; strpos(), et strrpos() :

Les fonctions strpos() et strrpos() opèrent de manière comparable à strstr(), si ce n'est que, au lieu de renvoyer une sous-chaîne, elles renvoient la position numérique de l'aiguille dans la botte_de_paille.

Le prototype de la fonction strpos() est le suivant :

    int strpos (string botte_de_paille, string aiguille, int [offset]) ;

Le nombre entier renvoyé par cette fonction donne la position de la première occurrence de l'aiguille au sein de la botte_de_paille. Le premier caractère occupe la position 0, comme c'est généralement le cas.

Par exemple, le code qui suit imprime la valeur 4 dans la fenêtre du navigateur que si vous tapez le caractère "v" :

Pour visualiser l'aperçu, en cliquant ici. [Exemple 2].

Dans ce cas, l'aiguille n'est constituée que d'un seul caractère, mais pourrait être une chaîne de n'importe quelle longueur.

Le paramètre optionnel offset s'emploie pour spécifier une position au sein de la botte_de_paille, à partir de laquelle la recherche doit être entreprise. Par exemple, la ligne de code qui suit :

    $Position = "Bienvenue dans la boutique de chez Jean-Pierre !" ;

    $Test_chaine = "$Position" ;

    @$trouve_moi = $_POST ["recherche"] ;

    @$Position = strpos ($Test_chaine, $trouve_moi, 5 ) ;

ou encore :     echo strpos ($Test_chaine, "v", 5) ;

Conduirait à l'impression de la valeur nulle dans le navigateur, parce que l'interpréteur PHP commencerait la recherche à partir du caractère situé à la position 5, et ne considérerait par conséquent pas le caractère "v" situé à la position 4, donc, la valeur sera nulle puisqu'il n'y a pas d'autres caractères "v" dans la chaîne ci-dessus.

La fonction strrpos() est quasi identique à la fonction strpos(), si ce n'est qu'elle renvoie la position de la dernière occurrence de l'aiguille dans la botte_de_paille. De plus, contrairement à strpos(), la fonction strrpos() ne peut rechercher que des "aiguilles" à un seul caractère. Ainsi, si vous spécifiez une chaîne, en guise d'argument aiguille, strrpo() ne prendra en compte que le premier caractère de cette chaîne.

Lorsque les fonctions strpos() et strrpos() ne localisent aucune occurrence de l'aiguille dans la botte_de_paille, elles renvoient la valeur false. Ce comportement peut se révéler problèmatique, dans la mesure où false est équivalent à 0 dans un langage faiblement typé tel que PHP, et que 0 désigne également la position du premier caractère dans une chaîne.

Vous pouvez éviter toute confusion, en vous servant de l'opérateur === pour tester les valeurs renvoyées, comme suit ; et nous évoquons une partie du code qui se trouve déjà ci-dessus dans le TEXTAREA :

    <?php

    $Position = "Bienvenue dans la boutique de chez Jean-Pierre !" ;

    $Test_chaine = "$Position" ;

    @$trouve_moi = $_POST ["recherche"] ;

    @$Position = strpos ($Test_chaine, $trouve_moi ) ;

    // Notez l'utilisation de === (identit&eacute;). Un simple == (&eacute;galit&eacute;) ne donnerait pas le r&eacute;sultat escompt&eacute ;

    // car la lettre 'B' est à la position 0 (la premi&egrave;re).

    echo "<BR/> <BR/>" ;

    if ($Position === false)

    {

        echo "<font face = 'Arial' size = '3' color = '#000000'><b>&nbsp;&nbsp;&nbsp;&nbsp;La sous-cha&icirc;ne <font color = '#FF0000'> ''$trouve_moi'' </font> n'a pas &eacute;t&eacute; trouv&eacute;e dans la cha&icirc;ne</font></b> <font face = 'Arial' size = '3' color = '#800000'><b> : ''$Test_chaine'' </b> </font>" ;

    }

    else

    {

        echo "<font face = 'Arial' size = '3' color = '#000000'><b>&nbsp;&nbsp;&nbsp;&nbsp;La sous-cha&icirc;ne <font color = '#FF0000'> ''$trouve_moi'' </font> a &eacute;t&eacute; trouv&eacute;e dans la cha&icirc;ne : <font color = '#800000'> ''$Test_chaine'' </b> </font>" ;

           echo "<b> Se trouve &agrave; la position <font color = '#FF0000'> $Position </font> </b>" ;

    }

    ?>

Attention : le code complet se trouve dans le TEXTAREA ci-dessus.

Notez que ce code ne fonctionne qu'avec la version 4 ou ultérieure de PHP. Avec les versions précédentes, vous pouvez détecter si la valeur renvoyée est la valeur false, en testant si la valeur renvoyée est une chaîne.

Substitution de sous-chaînes ; str_replace() et substr_replace() :

La fonctionnalité de recherche/remplacement peut se révéler extrêmement utile pour traiter les chaînes. Elle permet de personnaliser les documents générés par PHP (par exemple, une procédure de recherche/remplacement peut être mise en oeuvre pour remplacer <<name>> par un nom de personne, et <<adresse>> par l'adresse de la personne considérée). Elle permet également d'exercer une censure sur des termes particuliers, par exemple, dans le contexte d'une application de forum de discussion, voire d'une application de formulaire "intelligent".

Là encore, le langage PHP offre un jeu de fonctions spécifiques pour le traitement des chaînes ou des expressions régulières.

str_replace() est la fonction de traitement de chaîne la plus utilisée pour le remplacement. Son prototype est le suivant :

    string str_replace (string aiguille, string nouvelle_aiguille, string botte_de_paille) ;

La fonction str_replace() remplace dans la chaîne botte_de_paille toutes les instances de la sous-chaîne aiguille par la sous-chaîne nouvelle_aiguille.

Par exemple, dans le cadre de notre formulaire de courrier électronique, les clients pourraient glisser des termes injurieux dans leurs messages. Nous pourrions, en tant que programmeurs, éviter aux divers services de l'entreprise de chez Jean-Pierre d'être importunés par de tels messages par une ligne de code du type :

    $Retour_Information = str_replace (De_mauvais_goût, "%!@*", $Retour_Information) ;

La fonction substr_replace() s'utilise pour rechercher et remplacer une sous-chaîne particulière dans une chaîne. Son prototype est le suivant :

    string substr_replace (string chaîne, string remplacement, int début, int [longueur]) ;

Cette fonction remplace une certaine partie de la chaîne chaîne par la chaîne remplacement. Les valeurs des arguments début et longueur définissent la partie à remplacer.

L'argument début spécifie la position dans la chaîne chaîne à partir de laquelle doit intervenir le remplacement. Si la valeur contenue dans début est 0 ou positive, alors la position est définie à partir du début de la chaîne ; si elle est négative, la position est définie à partir de la fin de la chaîne. Par exemple, la ligne de code qui suit conduit au remplacement par un "X" du dernier caractère de la chaîne contenue dans $test :

    $test = 1000 ;

    $test = substr_replace ($test, "X", -1) ;

    echo $test ;

On aura donc comme résultat : 100X

L'argument longueur est optionnel, et spécifie la position dans la chaîne où l'interpréteur PHP doit stopper le remplacement. Lorsque cet argument n'est pas fourni, la chaîne est remplacée à partir de la position début jusqu'à la fin de la chaîne.

Lorsque l'argument longueur a la valeur zéro, la chaîne remplacement est insérée dans la chaîne chaîne, sans écraser la chaîne existante.

Lorsque l'argument longueur a une valeur positive, il spécifie le nombre de caractères qui doivent être remplacés par l'argument nouvelle_chaîne.

Lorsque l'argument longueur contient une valeur négative, il spécifie la position à partir de laquelle doit s'interrompre le remplacement, comptée à partir de la fin de la chaîne chaîne.

Jeux et classes de caractères :

La possibilité d'utiliser des jeux de caractères dans les expressions régulières rend celles-ci beaucoup plus puissantes pour les opérations de recherche que les simples expressions exactes. Les jeux de caractères peuvent être utilisés pour rechercher un caractère d'un type particulier, un peu à la manière d'un joker.

Tout d'abord, le caractère point (.) peut être utilisé comme jocker, pour représenter tout autre caractère, excepté le caractère de nouvelle ligne (\n.) Ainsi, l'expression régulière est : .at

Peut-elle être mise en correspondance, entre autres, avec les chaînes "cat", "sat", ou "mat". Ce type de joker s'emploie souvent pour rechercher des noms de fichiers dans les systèmes d'exploitation.

Avec une expression régulière, vous pouvez préciser le type du caractère à rechercher. Vous pouvez même définir un jeu de caractères auquel le caractère recherché devra appartenir. Dans l'exemple précédent, l'expression régulière correspondait à "cat" et "mat". Cette expression régulière correspond également à "#at". Pour spécifier que le caractère à mettre en correspondance doit être une lettre située entre a et z, vous pouvez utiliser la formulation suivante :

    [a-z]

La paire de crochets, [et], définit une classe de caractères, c'est-à-dire un jeu de caractères auquel doit appartenir le caractère recherché. Notez que l'expression spécifiée entre les deux crochets ne correspond qu'à un caractère seulement.

Vous pouvez définir un jeu de caractères sous la forme d'une liste, comme suit :

    [aeiouy]

Cette expression indique que le caractère recherché doit être une voyelle.

Vous pouvez également spécifier une plage de caractères, en utilisant des tirets, comme dans l'expression [a-z], ou un ensemble de plages de caractères, de la manière suivante :

    [a-zA-Z]

Cette expression spécifie que le caractère recherché doit être une lettre, indifféremment majuscule ou minuscule.

Un jeu de caractères peut aussi s'employer, en spécifant que le caractère recherché ne doit pas appartenir au jeu. Par exemple :

    [^a-z]

Décrit tout caractère qui n'est pas situé entre a et z. L'accent circonflexe placé entre crochet est synonyme de négation. Spécifié hors des crochets, il prend une autre signification sur laquelle nous reviendrons un peu plus loin de cette leçon.

Vous pouvez définir votre propres jeux et classes de caractères, mais vous pouvez également utiliser dans les expressions régulières des classes de caractères prédéfinies dans PHP. Celles-ci sont décrites dans la figure 6 du tableau ci-après :

Fig. 6. - Classes de caractères utilisables dans les expressions régulières de style POSIX :
Classe Correspondance
[[:alnum:]] Caractères alphanumériques
[[:alpha:]] Caractères alphabétiques
[[:lower:]] Lettres en majuscules
[[:upper:]] Lettres en minuscules
[[:digit:]] Décimales
[[:xdigit:]] Chiffres hexadécimaux
[[:punct:]] Ponctuation
[[:blank:]] Tabulations et espaces
[[:space:]] Caractères d'espace blanc
[[:cntrl:]] Caractères de contrôle
[[:print:]] Tous les caractères imprimables
[[:graph:]] Tous les caractères imprimables, excepté le caractère espace

Répétition :

Lors d'une recherche, il arrive fréquement qu'il soit nécessaire de spécifier que le motif recherché peut être une chaîne particulière ou une classe de caractères répétée plusieurs fois. Pour représenter une telle répétition, il suffit d'utiliser deux caractères spéciaux dans l'expression régulière. Le symbole * indique que le motif peut être répété zéro ou plusieurs fois, tandis que le symbole + indique que le motif peut être répété une ou plusieurs fois. Le symbole doit être spécifié directement après la part de l'expression à laquelle il s'applique. Par exemple :

    [[:alnum:]]+

Signifie "au moins un caractère alphanumérique".

Sous-expressions :

Il apparaît souvent très utile de pouvoir scinder une expression en sous-expressions, de sorte, par exemple, à signifier "au moins une de ces chaînes suivie par exactement l'une d'entre elles". L'usage de parenthèses permet de formuler ce type de spécification, exactement comme c'est le cas dans les expressions arithmétiques. Par exemple :

    (très)* large

Correspond à "large", "très large", "très très large", et ainsi de suite.

Dénombrement de sous-expressions :

Vous pouvez spécifier le nombre de fois qu'une sous-expression peut être répétée, au moyen d'une expression numérique placée entre accolades ({}). Vous avez ainsi la possibilité d'indiquer un nombre fixe de répétition ({3}), une plage de répétition ( {2, 4} signifie de 2 à 4 répétitions), ou bien encore une plage de répétition ouverte ({2,} signifie au moins deux répétitions).

Par exemple :

    (très) {1, 3}

Correspond à "très", "très très" et "très très très".

Ancrage au début ou à la fin d'une chaîne :

Vous pouvez spécifier qu'une sous-expression particulière doit apparaître en début, et/ou à la fin de la chaîne explorée. Cette possibilité se révèle précieuse pour s'assurer que seule l'expression recherhée, et aucune autre, n'apparaît dans la chaîne trouvée.

Le symbole accent circonflexe (^) s'utilise en début d'expression régulière pour indiquer que le motif recherché doit figurer au début de la chaîne explorée. A l'inverse, le symbole $ s'utilise en fin d'expression régulière pour indiquer que le motif recherché doit figurer à la fin de la chaîne explorée.

Par exemple, l'expression régulière esr la suivante :

    ^Jean

Décrit l'occurrence de "Jean" au début d'une chaîne, tandis que :

    com$

Décrit l'occurrence de com à la fin d'une chaîne.

Enfin, l'expression :

    ^[a-z]$

Spécifie "tout caractère compris entre a et z, et formant une chaîne en soi".

Branchement :

Un trait vertical s'utilise pour représenter un choix dans une expression régulière. Par exemple, pour rechercher com, ou edu, ou net, nous pouvons utiliser l'expression suivante :

    (com) | (edu) | (net)

Recherche littérale de caractères spéciaux :

Pour rechercher un des caractères spéciaux mentionnés dans cette section, tel que ., {, ou $, vous devez le faire précéder d'une barre oblique inversée (\). Par exemple, pour représenter une barre oblique inversée, vous devez spécifier deux barres obliques inversées, \\.

Récapitulatif sur les caractères spéciaux :

Les figures 7 et 8 des tableaux donnent un récapitulatif sur les caractères spéciaux. La figure 7 du tableau donne la signification des caractères spéciaux, utilisés hors de paires de crochets. La figure 8 du tableau montre la signification de caractères spéciaux, dans le cas où ils sont placés entre cochets.

Fig. 7. - Récapitulatif sur les caractères spéciaux utilisés dans des expressions régulières POSIX, hors crochets :
Caractère Signification
\ Caractère d'échappement
^ Correspondance en début de chaîne
$ Correspondance en fin de chaîne
. Correspond à tout caractère, excepté le caractère de nouvelle ligne (\n)
| Début d'un autre choix, (se lit comme OU)
( Début d'un sous-motif
) Fin d'un sous-motif
* Répétition 0 ou plusieurs fois
+ Répétition 1 ou plusieurs fois
{ Début d'un quantificateur min/max
} Fin d'un quantificateur min/max


Fig. 8. - Récapitulatif sur les caractères spéciaux utilisés dans des expressions régulières POSIX, entre crochets :
Caractère Signification
\ Caractère d'échappement
^ NON, seulement lorsque utilisé en position initiale
- Utilisé pour spécifier des plages de caractères

Application au cas du formulaire "intelligent" de courrier électronique :

Dans le cadre de notre formulaire de courrier électronique, nous pouvons envisager au moins deux applications différentes aux expressions régulières. Nous pourrions tout d'abord y avoir recours pour améliorer le dispositif précédemment proposé pour la détection de la présence de termes particuliers dans les messages envoyés par les clients. En utilisant une fonction de traitement de chaîne, comme nous l'avons déjà suggéré, il nous faudrait effectuer trois recherches différentes pour localiser l'occurrence des expressions "Boutique", "Service clients", et "Vente au détail". Nous pourrions toutefois aboutir au même résultat en une seule recherche, en utilisant l'expression régulière suivante :

    Boutique | Service clients | Vente au détail

La deuxième application envisageable est la validation des adresses de courrier électronique des clients, par encodage du format standardisé d'une adresse de courrier électronique dans une expression régulière. Ce format encodé doit représenter la séquence suivante : des caractères alphanumériques et des tirets, suivis par un symbole @, puis par une chaîne de caractères alphanumériques et de tirets, suivis par un point, puis par plusieurs caractères alphanumériques et tirets et éventuellement plusieurs points, jusqu'à la fin de la chaîne. Concrètement, ce format pourrait s'encoder de la manière suivante :

    ^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$

La sous-expression ^[a-zA-Z0-9_]+ décrit "la chaîne doit commencer par au moins une lettre, un nombre ou un caractère de soulignement, ou par une combinaison de tels caractères".

Le symbole @ représente un caractère @ littéral.

La sous-expression [a-zA-Z0-9\-]+ décrit la première partie du nom d'hôte, formée de caractères alphanumériques et de tirets. Notez que le tiret, qui est un caractère spécial, est précédé ici d'une barre oblique inversée parce qu'il est placé entre crochets.

La combinaison _. représente un point littéral (.).

La sous-expression [a-zA-Z0-9\-\.]+$ représente le reste du nom de domaine, y compris des lettres, des nombres, des tirets et plusieurs points si nécessaire, jusqu'à la fin de la chaîne.

Une analyse un tant soit peu poussée montrerait que certaines adresses de courrier électronique non valides pourraient être décrites par cette expression régulière. Il est impossible de dresser la liste de toutes ces adresses indésirables, mais, il serait utile d'en prendre quelques-unes en compte.

Maintenant que nous avons défini la notion d'expression régulière, nous allons passer, en revue les fonctions PHP qui permettent de les utiliser.

Localisation de sous-chaînes au moyen d'expressions régulières :

La localisation de sous-chaînes est la principale application des expressions régulières décrites dans les sections précédentes. preg_match() et preg_match ('i', $lien) ; (Pour la fonction eregi(), il faut simplement ajouter un i), sont les deux fonctions PHP de recherche d'expressions régulières.

Le prototype de la fonction preg_match() est le suivant :

    int preg_match (string motif, string chaîne, array [résultat]) ;

La fonction preg_match() explore la chaîne chaîne, à la recherche d'occurrence de l'expression régulière définie dans l'argument motif. Les sous-chaînes ainsi localisées dans la chaîne chaîne sont stockées dans le tableau résultat, sous la forme d'une sous-expression par élément.

La fonction preg_match ('i', $lien) ; est identique à la fonction preg_match(), si ce n'est qu'elle n'est pas sensible à la casse.

Notre formulaire de courrier électronique peut être modifié en y introduisant des expressions régulières, de la manière suivante :

    echo "&nbsp;&nbsp;&nbsp;&nbsp;<font face = 'Arial' size = '3' color = '005500'> <b>" . @$Votre_E_Mail = $_POST["Votre_E_Mail"] ;

    // Vérifie si la chaîne ressemble à un E-Mail

    if (preg_match('#^[\a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$#', $Votre_E_Mail))

    {

        echo " "; // ici vous pouvez évoquer un texte de votre choix

    }

    else

    {

        echo '<SCRIPT TYPE = "TEXT/JAVASCRIPT">'

        . 'alert("Cette E-Mail est invalide : ' . $Votre_E_Mail. ' ") ; '

        . '</SCRIPT>';

        echo "<BR/>" ;

        echo "<font face = 'Arial' size = '3' color = '#0000FF'> <b>&nbsp;&nbsp;&nbsp;&nbsp; Cela ne peut pas &ecirc;tre une adresse E-Mail valide. Veuillez recommencer ! </b> </font>" ;

    }

Pour visualiser l'aperçu, en cliquant ici. [Exemple 3].

Remplacement de sous-chaînes au moyen d'expressions régulières :

Des expressions régulières peuvent également s'utiliser pour localiser et remplacer des sous-chaînes, tout comme nous l'avons déjà fait au moyen de la fonction str_replace(). Les deux fonctions PHP dédiées à ce type d'opération de recherche/remplacement sont preg_replace() et eregi_replace. Le prototype de la fonction preg_replace() est le suivant :

    string preg_replace (string motif, string remplacement, string chaîne) ;

Cette fonction cherche dans la chaîne chaîne les occurrences de l'expression régulière motif, et les remplace par la chaîne remplacement.

La fonction eregi_replace() est identique à la fonction preg_replace(), si ce n'est qu'elle n'est pas sensible à la casse.

Morcellement de chaînes au moyen d'expressions régulières :

La fonction split() est une autre fonction de traitement d'expression régulière très utile. Son prototype est le suivant :

    array split (string motif, string chaîne, int [max]) ;

Cette fonction scinde la chaîne chaîne en sous-chaînes, au niveau des sous-chaînes correspondant à l'expression régulière motif. Elle renvoie les sous-chaînes obtenues sous la forme d'un tableau. L'argument entier max limite le nombre d'éléments qui peuvent être stockés dans le tableau.

Par exemple, la fonction split() pourrait être mise en oeuvre pour décomposer les noms de domaine ou les dates, comme suit :

    $domaine = "Isole.Maison.Jardin.Education.Auxiliaire" ;

    $scinde = @split ("\.", $domaine) ;

    while (list($key, $value) = each ($scinde))

    echo "<BR/>" . $value ;

A noter : Cette fonction split() est obsolète mais, elle est remplacée par la fonction preg_split(), elle est pratiquement identique.

Ce code conduit à la décomposition de nom d'hôte, en ses cinq composantes, et à l'impression de chaque composante obtenue sur une ligne séparée.

Et pour finir cette leçon, de manière générale, il apparaît que les fonctions d'expression régulière sont moins efficaces que les fonctions de chaîne de même fonctionnalité. Par conséquent, lorsque les applications sont suffisamment simples pour que des fonctions de chaîne soient utilisées, mieux vaut utiliser des fonctions de chaîne que des fonctions d'expression régulière.

Pour l'instant, nous terminons cette quatrième leçon et nous verrons dans la prochaine, Les fonctions require() et include() qui sont très utilisées pour éviter de réécrire certains programmes.



  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet.   Haut de page
  Page précédente   Page suivante







Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.