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.
POSIX | PCRE |
---|---|
ereg_replace() | preg_replace() |
ereg() | preg_match() |
eregi_replace() | preg_replace() |
eregi() | preg_match() |
split() | preg_split() |
spliti() | preg_split() |
sql_regcase() | No equivalent |