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
importants 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.
-
La définition POSIX d'une "classe de caractères" diffère de celle en PCRE.
Les expressions entre crochets pour trouver un jeu de caracères explicites
sont supportées sous la forme PCRE d'une
classe de caractères
mais la forme POSIX de collection d'éléments, de classes de caractères
n'est pas supportée.
Le fait de fournir une expression avec une classe de caractères qui
commence et qui se termine par le caractère :,
. ou par le caractère =
à PCRE est interprété comme une tentative d'utilisation d'une de
ces fonctionalités non supportées et résultera en une erreur de
compilation.