lundi, décembre 11, 2017
Nom d'utilisateur : Mot de passe :
Home > Dossiers > Général > Utilisation des expressions régulières en php
[NEWS]
Envoyé par unreal
Les expressions régulières ou "RegEx" permettent de localiser (et remplacer) des séquences contenant des valeurs inconnues, mais qui suivent une certaine logique.

Pour bien situer l'utilité, voici un problème qui pourrait être résolu grâce à des RegEx : vous avez une chaîne contenant une date au format US (YYYYMMDD) que vous voulez afficher au format européen (DD/MM/YYYY).


Les fonctions

Les 2 fonctions que vous allez le plus souvent utiliser sont ereg_replace (detection et remplacement des regex) et ereg (detection seulement).

Pour la syntaxe des fonctions, tout est expliqué en détail sur le site du php.


Les caractères spéciaux

Ci-dessous la liste des caractères spéciaux et leurs rôles :

  • . : n'importe quel caractère
  • ^ : début de chaîne
  • $ : fin de chaîne
  • * : >=0 occurrences des caractères
  • + : >0 occurrences des caractères
  • ? : 0 ou 1 occurrences des caractères
  • (...) : séquence de caractères
  • [...] : caractères à apparaître dans une séquence de caractères
  • {x} ou {x,y} : nombre d'occurrences de caractères
  • | : fonction logique "ou"
  • \ : caractère "escape", permet d'utiliser un caractère spécial littéralement



Reprenons l'exemple donné en introduction

Il s'agit de détecter des groupes de chiffres allant de 0 à 9, soit [0-9]. Il peut avoir 2 ou 4 chiffres dans chaque groupe, soit [0-9]{2} ou [0-9]{4}.

Donc [0-9]{4}[0-9]{2}[0-9]{2} permettrait de détecter la date.

Mais nous avons besoin de récupérer les séquences de chiffres de chaque groupe pour inverser l'ordre, soit ([0-9]{4})([0-9]{2})([0-9]{2}).

A partir de là prenons 2 cas de figure :

1/ La date est en fin de chaîne, après une partie connue, par exemple "date20050531". On pourrait donc détecter de cette manière :

"date([0-9]{4})([0-9]{2})([0-9]{2})$" <-- le $ indique la fin de chaîne

2/ La date a des lettres de chaque côté, par exemple "blabla20050531abc". Il faudrait alors procéder de cette manière :

".*([0-9]{4})([0-9]{2})([0-9]{2}).*" <-- les .* matchent n'importe quels caractères

Pour le remplacement, utilisons la fonction ereg_replace :

<?php
$str = 'blabla20050531abc';
$str = ereg_replace('.*([0-9]{4})([0-9]{2})([0-9]{2}).*', '\\3/\\2/\\1', $str);
echo ($str);
?>


Note : les \\1, \\2 et \\3 contiennent les séquences reconnues.


Conclusion

Il est important de ne pas abuser des RegEx qui sont puissantes mais lourdes en temps processeur. Quand vous n'avez besoin que de remplacer des chaînes connues, il convient d'utiliser la fonction str-replace qui est carrément plus rapide.

Voilà, je mettrai en ligne d'autres guides quand je les aurai fait. wink.gif

Posté le 01/06/05 à 02:23

Commentaires...[1-1]


RE: Utilisation des expressions régulières en php

nicopoy

[AVATAR]

Messages : 1
Inscrit le : 03/06/05
moi y'a un truc qui me manque dans tes caractères spéciaux, c'est le "non"...
et comme aujourd'hui j'ai la flemme de chercher et que demain j'y penserai plus, je te laisse l'ajouter :p

Posté le 19/08/05 à 11:27

Utilisation des expressions régulières en php
Vous pourriez commenter si vous aviez un compte !