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.

  1. Las funciones de PCRE requieren que el patrón esté encerrado por delimitadores.
  2. 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.
  3. 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.
  4. La definición de POSIX de una "clase carácter" difiere de la de PCRE. Las expresiones simples entre corchetes para comparar un conjunto de caracters explícito está soportado en la forma de clases carácter de PCRE, pero los elementos de cotejamiento, las clases carácter, y las equivalencias de caracters de POSIX no están soportadas. Proporcionar a PCRE una expresión con una clase carácter que empiece y finalice con los caracters :, . o = se interpreta como un intento de usar una de las características no soportadas, y causará un error de compilación.

Sustituciones de funciones
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 hay equivalente

add a note add a note

User Contributed Notes 2 notes

up
1
cdragon at dracoventions dot com
11 years ago
In regards to the previous comment that says "there are several other differences including different meaning for the symbols  ( [ different rules for which symbols need escaping", as far as I can tell from reading
http://www.tin.org/bin/man.cgi?section=7&topic=regex
there are absolutely no "other differences" except in what the man page calls "Obsolete  ("basic'')  regular  expressions".  However, PHP doesn't appear to use the obsolete form of expressions in its POSIX functions.

PCRE even supports all of the POSIX named character classes such as [:space:].
up
0
jasen at treshna dot com
13 years ago
there are several other differences

including different meaning for the symbols  ( [
different rules for which symbols need escaping (they can't be the same as both standard posix and extended posix)

you should read the full documentation for PCRE before chaging any posix regex to use pcre.
To Top