Differences avec les regex POSIX
Depuis PHP 5.3.0, l'extension des Regex POSIX est
obsolète. Il y a un certain nombre de différences entre les regex POSIX et PCRE. Cette
page liste les plus remarquables qu'il faut connaitre pour passer de l'un à lautre.
-
Les fonctions PCRE demandent à ce que le motif soit entouré de délimiteurs.
-
A la différence de POSIX, l'extension PCRE n'a pas de fonctions dédiées à la correspondance
insensible à la casse. Au lieu de cela, il faut utiliser modificateur i.
D'autres modificateurs sont aussi disponibles.
-
Les fonctions POSIX trouvent l'occurence la plus longue en partant de la gauche, mais PCRE
s'arrête dès correspondance avec la première occurence. Si la chaine n'a aucune correspondance,
cela ne crée pas de différence mais si il y a correspondance, cela peut avoir des effets
dramatiques sur le resultat trouvé et le temps de recherche du motif.
Pour illustrer cette différence, considérons l'exemple suivant tiré de
"Mastering Regular Expressions" par Jeffrey Friedl. L'utilisation du motif
one(self)?(selfsufficient)? sur la chaine
oneselfsufficient avec PCRE donnera un résultat
oneself, mais avec POSIX le résultat sera toute la chaine
oneselfsufficient. Les deux sous-chaines correspondent à la chaine originale,
mais POSIX utilise la plus longue comme résultat.