• hello@dev-maxime-guinard.fr
  • 06.65.13.24.36

Expressions Regulieres PHP.

Table of Contents

Les expressions jouent un rôle très important dans le traitement de chaînes. Elles permettent de vérifier la validité des chaînes de caractères, comme la vérification d’un email ou de saisies chiffrées, et elles peuvent également être utilisées pour traiter des éléments à l’intérieur d’une chaîne, tels que l’extraction ou le remplacement.

Il existe deux types d’expressions utilisées avec PHP : POSIX et PCRE (Perl Compatible Regular Expression). Les expressions PCRE (héritées de Perl) sont bien plus puissantes que les POSIX. Nous utiliserons ce type pour notre tutoriel.

La fonction preg_match() vérifie si le format d’une chaîne correspond à un motif (ou masque). Elle fonctionne avec deux paramètres : le motif et la chaîne à traiter en deuxième paramètre. La fonction retourne false si le format de la chaîne ne correspond pas au motif.

<?php         $chaine = "daniel";         $motif="/dan/"; // motif 'dan'         if(preg_match($motif,$chaine)){             echo "format correct";         }else{             echo "format incorrect";         }         ?>

Affichage :

format correct

Dans cet exemple, la fonction preg_match() trouve le motif ‘dan’ dans la chaîne et retourne ‘format correct’.

Pour déclarer la chaîne motif, il faut l’encadrer par des délimiteurs. Les délimiteurs les plus courants sont les slashes (/), dièses (#) et les tildes (~). Ici, nous utilisons les slashes ‘/’.

<?php         $motif1 = '/ /';         $motif2 = '# #';         $motif3 = '~ ~';         ?>

Échappement dans le motif

Si le motif utilise le même caractère que les délimiteurs, il faudra échapper tous les caractères présents dans le motif avec le backslash ‘\’.

<?php         $motif1 = '/3\/2/'; // échappement nécessaire         $motif2 = '#3/2#'; // pas besoin d'échappement         ?>

La fonction preg_quote() peut être utilisée pour échapper une chaîne et l’utiliser dans un motif. Les caractères spéciaux qui seront protégés sont les suivants : \ + * ? [ ^ ] $ ( ) { } = ! < > | : –

<?php         $motif="\ + * ? [ ^ ] $ ( ) { } = ! < > | : - /";         $motif = preg_quote($motif,"https://tutowebdesign.com/"); // le second paramètre protège le "https://tutowebdesign.com/" ignoré par défaut         echo $motif;         ?>

Affichage :

\\ \+ \* \? \[ \^ \] \$ \( \) \{ \} \= \! \< \> \| \: \- \/

Son second paramètre optionnel sert à spécifier le délimiteur qui doit être également échappé, comme ‘/’ qui est très utilisé comme délimiteur.

Les caractères spéciaux

Dans les expressions régulières, certains caractères ont une signification spéciale et doivent être échappés ou utilisés avec précaution :

  • . : Correspond à n’importe quel caractère, sauf un saut de ligne.
  • [ ] : Définit une classe de caractères. Par exemple, [aeiou] correspond à n’importe quelle voyelle.
  • [^ ] : Définit une classe de caractères négative. Par exemple, [^0-9] correspond à tout caractère qui n’est pas un chiffre.
  • * : Correspond à zéro ou plusieurs occurrences du caractère précédent. Par exemple, "a*" correspond à "aa" ou "a".
  • + : Correspond à une ou plusieurs occurrences du caractère précédent. Par exemple, "a+" correspond à "aa" mais pas à "a".
  • ? : Correspond à zéro ou une occurrence du caractère précédent. Par exemple, "a?" correspond à "a" ou à une chaîne vide.

Les ancres

Les ancres permettent de spécifier le début et la fin d’une chaîne :

  • ^ : Correspond au début de la chaîne.
  • $ : Correspond à la fin de la chaîne.
<?php         $chaine = "Bonjour, comment ça va ?";         $motif = '/^Bonjour/'; // commence par "Bonjour"         if(preg_match($motif, $chaine)){             echo "La chaîne commence par Bonjour.";         }else{             echo "La chaîne ne commence pas par Bonjour.";         }         ?>

Affichage :

La chaîne commence par Bonjour.

Dans cet exemple, la fonction preg_match() recherche le motif ‘^Bonjour’ au début de la chaîne, et elle le trouve.

Les quantificateurs

Les quantificateurs permettent de spécifier le nombre d’occurrences d’un caractère ou d’un groupe :

  • {n} : Correspond exactement à n occurrences.
  • {n,} : Correspond à n occurrences ou plus.
  • {n,m} : Correspond à au moins n occurrences et au plus m occurrences.
<?php         $chaine = "aaaaa";         $motif = '/a{2,4}/'; // de 2 à 4 'a'         if(preg_match($motif, $chaine)){             echo "La chaîne contient entre 2 et 4 'a'.";         }else{             echo "La chaîne ne contient pas entre 2 et 4 'a'.";         }         ?>

Affichage :

La chaîne contient entre 2 et 4 'a'.

Le motif ‘/a{2,4}/’ signifie qu’il doit y avoir entre 2 et 4 ‘a’ dans la chaîne.

Les classes prédéfinies

Il existe des classes prédéfinies pour des caractères couramment utilisés :

  • \d : Correspond à un chiffre.
  • \D : Correspond à un caractère qui n’est pas un chiffre.
  • \w : Correspond à un caractère alphabétique (lettre) ou un chiffre.
  • \W : Correspond à un caractère qui n’est ni alphabétique ni un chiffre.
  • \s : Correspond à un espace blanc (espace, tabulation, retour à la ligne, etc.).
  • \S : Correspond à un caractère qui n’est pas un espace blanc.

Les groupes

Les groupes permettent de regrouper des caractères et d’appliquer des quantificateurs à l’ensemble :

<?php         $chaine = "aaaaab";         $motif = '/(a{2})b/'; // deux 'a' suivis de 'b'         if(preg_match($motif, $chaine)){             echo "Le motif est présent dans la chaîne.";         }else{             echo "Le motif n'est pas présent dans la chaîne.";         }         ?>

Affichage :

Le motif est présent dans la chaîne.

Dans cet exemple, le motif ‘(a{2})b’ signifie deux ‘a’ suivis de ‘b’.

Les alternatives

Les alternatives permettent de spécifier plusieurs motifs possibles :

<?php         $chaine = "Bonjour";         $motif = '/(Bonjour|Salut)/'; // soit 'Bonjour' soit 'Salut'         if(preg_match($motif, $chaine)){             echo "Le motif est présent dans la chaîne.";         }else{             echo "Le motif n'est pas présent dans la chaîne.";         }         ?>

Affichage :

Le motif est présent dans la chaîne.

Dans cet exemple, le motif ‘(Bonjour|Salut)’ signifie soit ‘Bonjour’ soit ‘Salut’.

Les quantificateurs non gourmands

Les quantificateurs sont gourmands par défaut, ce qui signifie qu’ils essaieront de correspondre au maximum de caractères possible. Pour les rendre non gourmands, vous pouvez les suivre de ‘?’ :

  • *? : Correspond au minimum d’occurrences du caractère précédent.
  • +? : Correspond au minimum d’occurrences du caractère précédent.
  • ?? : Correspond au minimum d’occurrences du caractère précédent.
  • {n,m}? : Correspond au minimum d’occurrences du caractère précédent.
<?php         $chaine = "aaaaa";         $motif = '/a{2,4}?/'; // correspond au minimum d'occurrences         if(preg_match($motif, $chaine, $matches)){             echo "Le motif est présent dans la chaîne : " . $matches[0];         }else{             echo "Le motif n'est pas présent dans la chaîne.";         }         ?>

Affichage :

Le motif est présent dans la chaîne : aa

Dans cet exemple, le motif ‘/a{2,4}?/’ correspond au minimum d’occurrences de ‘a’ dans la chaîne.

Les assertions

Les assertions sont des conditions qui doivent être remplies pour qu’un motif soit trouvé :

  • (?=…) : Recherche en avant (positive lookahead).
  • (?!…) : Recherche en avant négative (negative lookahead).
  • (?<=…) : Recherche en arrière (positive lookbehind).
  • (?<!…) : Recherche en arrière négative (negative lookbehind).
<?php         $chaine = "ABC123";         $motif = '/\d+(?=[A-Z])/'; // chiffres suivis de lettres majuscules         if(preg_match($motif, $chaine, $matches)){             echo "Le motif est présent dans la chaîne : " . $matches[0];         }else{             echo "Le motif n'est pas présent dans la chaîne.";         }         ?>

Affichage :

Le motif est présent dans la chaîne : 123

Dans cet exemple, le motif ‘\d+(?=[A-Z])’ correspond à des chiffres suivis de lettres majuscules.

Les options

Les options modifient le comportement des expressions régulières :

  • i : Insensible à la casse (ignore la distinction entre majuscules et minuscules).
  • m : Multiligne (traite les lignes multiples).
  • u : UTF-8 (traite les caractères UTF-8).
  • s : Traite le texte comme un seul bloc (fait en sorte que le point corresponde aux sauts de ligne).
<?php         $chaine = "Hello\nWorld";         $motif = '/world/i'; // insensible à la casse         if(preg_match($motif, $chaine, $matches)){             echo "Le motif est présent dans la chaîne : " . $matches[0];         }else{             echo "Le motif n'est pas présent dans la chaîne.";         }         ?>

Affichage :

Le motif est présent dans la chaîne : World

Dans cet exemple, l’option ‘i’ rend la recherche insensible à la casse, ce qui signifie que "world" correspond à "World".

Conclusion

Les expressions régulières sont un outil puissant pour la recherche de motifs dans les chaînes de caractères. Elles permettent de définir des motifs complexes en utilisant des caractères spéciaux, des quantificateurs, des classes prédéfinies, des groupes, des alternatives, des quantificateurs non gourmands, des assertions et des options. En comprenant ces concepts de base, vous serez en mesure de créer des expressions régulières efficaces pour résoudre divers problèmes de traitement de texte.

N’oubliez pas que la pratique est essentielle pour maîtriser les expressions régulières. Plus vous les utiliserez, plus vous deviendrez compétent dans leur création et leur utilisation.

Si vous avez des questions ou avez besoin d’exemples supplémentaires, n’hésitez pas à demander.

Maxime GUINARD
Maxime GUINARD

Merci d'avoir lu cet article. Je suis un développeur web WordPress passionné, et j'ai créé ce contenu avec soin pour vous offrir des informations de qualité. Restez connectés pour plus de conseils et d'astuces !

Facebook
Twitter
LinkedIn
Avantages Inconvénients
Permet de rechercher et de manipuler des chaînes de caractères de manière puissante Peut être complexe à comprendre pour les personnes peu familières avec les regex
Facilite la validation et la transformation de données Les expressions régulières complexes peuvent être difficiles à maintenir
Contribue à une manipulation avancée des chaînes de caractères Peut entraîner des erreurs difficiles à débuguer en cas de mauvaise utilisation
Améliore la flexibilité dans le traitement des motifs de texte Une mauvaise performance avec des expressions régulières très complexes

Un projet en tête ?

Myriam SRIKANTHA
Myriam SRIKANTHA
2023-12-21
Maxime GUIMARD a pris le temps de présenter son métier, auprès de mes classes de lycéen. Présentation efficace, claire et compréhensible. Il a été à l’écoute des questions des lycéens. Un grand merci à lui d’avoir pris le temps d’expliquer sa passion !
Philippe BERTIEAUX
Philippe BERTIEAUX
2023-10-01
Maxime a une capacité que peu de SEO managers ont à ce jour ; celle de pouvoir s'adapter de manière extrêmement rapide et d'une manière particulièrement efficace, à toutes situations techniques inconfortables, mêmes les plus délicates. Le résultat est toujours au rendez-vous. Merci Maxime.
Cuong Doan
Cuong Doan
2023-09-30
J'ai travaillé avec Maxime sur un projet d'optimisation, où nous avons indexé les pages sur Google Search Console et effectué des corrections techniques en SEO. Il a réussi à résoudre tous les problèmes. Il est toujours disponible pour répondre à toutes les questions, très professionnel. C'était un plaisir de travailler avec lui ????????????.
Artus Trézières
Artus Trézières
2023-09-30
J'ai adoré travailler avec Maxime. Il est à l'écoute, gentil, et très compétent. De plus, il travaille extrêmement bien. Je le recommande vivement !
Romain Knockaert
Romain Knockaert
2023-09-01
J'ai commandé auprès de Maxime une base pour un serveur Garry's Mod, n'ayant ni les compétences nécessaires ni le temps, il m'a aidé et m'a fourni une base propre avec des addons qu'il a fait lui-même pour un prix plus que raisonnable ! Grâce à lui j'ai pu gagner beaucoup de temps pour l'exécution de mon projet 🙂 je recommande !
maha
maha
2023-08-27
Maxime GUINARD se distingue vraiment en tant que développeur web indépendant de haut calibre ! Sa maîtrise du développement WordPress et du design web est tout simplement impressionnante. Je suis extrêmement satisfaite de la qualité de son travail et je n'ai aucune hésitation à le recommander chaudement. Il mérite amplement toutes les étoiles possibles, soit 5 étoiles sans aucun doute !
Nathou M
Nathou M
2023-05-24
Super !
Mario Mario
Mario Mario
2023-05-24
Super site web
Mitsuko
Mitsuko
2022-07-14
Hello, Maxime ma fait un super site web et aussi une carte en 3D ! J'ai passé 6 mois avec Maxime pour le tout. J'ai eu la chance de faire de superbes rencontres et de découvrir Maxime. Quelqu'un de dévouée et super bienveillant qui m'a permis de grandir et de m'accompagner tout au long de ma commande. Maxime est à l'écoute !
M Mestchersky
M Mestchersky
2022-04-11
Maxime is an excellent web developer and SEO consultant. Need any SEO advice? He is the one you're looking for.
Contact

Et si on discutait ? 🙂

  • Element Carré
  • Element Triangle
  • Element Triangle
  • Element Carré
Contact

Adresse

Avenue du bac
94210 SAINT MAUR DES FOSSES

Téléphone

06.65.13.24.36

Emails

dev@maxime-guinard.fr maxime.guinard.pro@gmail.com