preg_match VS preg_replace

Après lecture d’un titre comme celui là il est normal de se demander ce qu’on peut comparer entre preg_match et preg_replace. En effet, ces deux fonctions PHP n’ont pas le même but : preg_match test si une chaîne de caractères réponds à un modèle (ou pattern) alors que preg_replace remplace le modèle trouvé par une autre valeur.

La question que je me suis posé est la suivante : Est-il plus intéressant d’utiliser preg_match ou preg_replace pour convertir une date MySQL en format Français ?

(2009-12-13 01:45:00 => 13/12/1988 01:45:00)

Résultat

J’ai développé dans mon laboratoire personnel une toute petite application qui m’a permis d’établir s’il était plus rapide d’utiliser une fonction ou l’autre. Le temps d’exécution de preg_raplace en bleu et celui de preg_match en jaune.

replace en bleu et match en jaune

Mes tests


$datetime = '2009-12-13 01:45:00';
$datetimefr_replace = preg_replace(
 '#^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$#',
 '$3/$2/$1 $4:$5:$6',
 $datetime
 );
preg_match(
 '#^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$#',
 $datetime,
 $out
 );
 $datetimefr_match = $out[3].'/'.$out[2].'/'.$out[1].' '.$out[4].':'.$out[5].':'.$out[6];


Si vous voulez vous aussi effectuer ce test, vous trouver ici les tests que j’ai effectué dans le laboratoire. Vous remarquerez que j’ai utilisé deux librairies externes : JPGraph et Un timer perso en PHP.

Test en ligne

Vous pouvez aussi le tester directement sur internet.

Tagués avec : , , , , , ,
Publié dans PHP
2 commentaires pour “preg_match VS preg_replace
  1. JB dit :

    Pourquoi tu n’utilises pas la classe DateTime qui est faite pour ce genre de manipulation ?

    http://php.net/manual/fr/class.datetime.php

  2. Olivier PEREZ dit :

    En effet c’est quelque chose que je n’ais pas envisagé. Est-ce que tu aurais fais des tests pour savoir si c’est vraiment plus performant que les deux ?

Laisser un commentaire

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

*