2009-09-04 5 views
0

J'utilise deux versions différentes de php sur deux systèmes d'exploitation différents.PHP regex se comporte différemment sur différentes versions ou différents OS

L'un est en cours d'exécution 5.2.9 sur windows (wamp).

L'un est 5.2.6 fonctionnant sur CentOS 5 (lampe).

Les expressions Regex impliquant des groupes fonctionnent sur Windows, mais pas sur CentOS.

Un tel exemple serait /^field_(?<myname>.+)/

Est-ce un problème du système d'exploitation? Ou un avec la façon dont PHP a été construit?

Merci,

Répondre

1

La plupart des fonctions regex disponibles en PHP remontent à libpcre, cette bibliothèque a eu un historique mouvementé au cours des deux dernières années en réponse à certains problèmes de sécurité, les correctifs de ces problèmes changent la sémantique. Lors de la construction de PHP par défaut, il utilise un libpcre fourni, quand cela change, il est noté dans le changelog ici: http://www.php.net/ChangeLog-5.php. Certaines distributions ou si vous vous compilez peuvent amener php à utiliser une libpcre externe qui aura la sémantique de cette version. Il n'y a pas de bonne solution, sauf que les choses ont tendance à se détériorer, si votre regex fonctionne avec la dernière version, elle a tendance à fonctionner dans les versions historiques, l'inverse, comme je l'ai souligné, n'est pas vrai.

0

Quelles fonctions regex utilisez-vous? PHP a ereg et preg, et l'expression régulière preg se comporte comme l'expression régulière de perls, et devrait se comporter de la même manière sur tous les systèmes d'exploitation.

+0

J'ai peur. – Dave

Questions connexes