Ou comment passer de la fonction eregi
à la fonction preg_match
.
Jusqu’à présent, au boulot, notre serveur web tournait sur Php 5.2. Une migration vers Php 5.4 est imminente mais nous avons encore certains (très vieux) scripts qui tournent avec des fonctions devenues obsolètes dès la version 5.3.
Parmi ces fonctions passées de vie à trépas, il y a la fonction eregi
.
La documentation PHP indique qu’il suffit de remplacer eregi
par preg_match
en ajoutant le paramètre i
.
On pourrait donc penser qu’il suffit de remplacer :
eregi($pattern, $subject, $matches);
Par :
preg_match($pattern.'i', $subject, $matches);
En fait, ce n’est pas suffisant. Tout d’abord, il faut savoir que la fonction preg_match
nécessite des délimiteurs. Vous pouvez librement les choisir. Personnellement, j’ai opté pour ~
car mon preg_match
va traiter des portions de code Html. Cela m’évitera donc de devoir échapper le délimiteur. Ensuite, vu la nature de ma chaîne d’entrée (Html), il me faut un traitement multi-lignes. Je vais donc ajouter l’option de recherche (Pattern Modifier) s
en plus de l’option i
qui, je le rappelle, rend la recherche insensible à la casse (le même i
qu’à la fin de eregi
).
Au final, la fonction eregi
doit être remplacée par :
preg_match('~'.$pattern.'~is', $subject, $matches);
Je résume. Pour passer de la fonction eregi
à preg_match
, il faut :
- ajouter un délimiteur (par exemple :
~
ou#
ou / ou!
ou autre) - ajouter l’option
i
pour une recherche insensible à la casse - ajouter l’option
s
pour une recherche sur plusieurs lignes
Et le tour est joué ^^
Source : http://stackoverflow.com/questions/12667369/php-preg-match-not-matching-past-line-breaks