Diferencias con las expresiones regulares POSIX
A partir de PHP 5.3.0, la extensión Expresiones Regulares POSIX
está obsoleta. Hay varias diferencias entre las expresiones regulares POSIX y
las expresiones regulares de PCRE. Esta página lista las más notables que son necesarias
conocer cuando se convierten a PCRE.
-
Las funciones de PCRE requieren que el patrón esté encerrado por delimitadores.
-
A diferencia de POSIX, la extensión PCRE no tiene funciones dedicadas para
comparación insensible a mayúsculas-minúsculas. En su lugar, esto está soportado por el uso
del i (PCRE_CASELESS)
modificador de patrón. También están
disponibles otros modificadores de patrón para cambiar la estrategia de comparación.
-
Las funciones POSIX buscan la más larga de las coincidencias del extremo izquierdo, pero PCRE
se detiene en la primera coincidencia válida. Si la cadena no coincide en absoluto
no hay diferencia, pero si coincide puede tener efectos dramáticos sobre
la coincidencia resultante y la velocidad de comparación.
Para ilustrar esta diferencia considere el siguiente ejemplo de
"Mastering Regular Expressions" por Jeffrey Friedl. Usar el patrón
one(self)?(selfsufficient)? sobre la cadena
oneselfsufficient con PCRE resultará en la coincidencia de
oneself, pero usando POSIX el resultado será la cadena
completa oneselfsufficient. Ambas (sub)cadenas coinciden con la
cadena origianl, pero POSIX requiere que la más larga sea el resultado.