2010-06-18 35 views
12

me encontré con este post: Python Regex vs PHP Regex pero en realidad no llegó si la sintaxis de Python de REGEX coincide con la sintaxis de PHP Regex.de REGEX difieren de PHP para Python

Empecé a convertir parte de mi antiguo código PHP a python (debido a g's appengine etc.), y ahora me gustaría saber si la expresión regular es 100% convertible, por simple copia & pegar.

cordiales,

Respuesta

9

Python utiliza una sintaxis similar a la sintaxis de Perl y PHP utiliza la sintaxis Perl Compatible Regular Expressions, por lo que debe ser casi lo mismo. Lea sobre el posible differences.

La única diferencia real es que en PHP, la expresión debe estar encerrada en delimiters.

+0

+ respuesta correcta, todos los demás también coinciden, pero su respuesta se ajusta más perfectamente a la pregunta que tenía en mente =) Gracias a todos los demás, daré +1 por cada respuesta/comentario correcto/ayuda –

1

creo que son, al menos en su mayoría compatibles, es decir,> 2/3. Puede haber algunas extensiones específicas del idioma en ambos lados, pero el núcleo es definitivamente el mismo. Esta afirmación se basa únicamente en mi experiencia personal (limitada), así que tómalo con un grano de sal.

Ambas implementaciones se basan en expresiones regulares de Perl, si no me equivoco.

1

No estoy seguro de la respuesta correcta, pero encontré una buena herramienta que ayudará con sus pruebas.

http://re.dabase.com/

Saludos!

+0

404, extraviado. – Qaz

+0

Pruebe en su lugar regex101.com o regexpal.com. – Qaz

1

Después de una investigación muy rápida, descubrí que la principal diferencia es:

PHP(tiene delimitadores)

/ REGEX/# "/" in front and at the end 

Python(no tiene delimitadores)

REGEX # no surrounding by any characters 
+2

Como lo señala Felix, las barras diagonales se llaman delimitadores. –

1

Los motores de expresiones regulares que están integrados en varios idiomas generalmente tienen diferencias, incluso si la sintaxis general es la misma. PHP tiene incorporados múltiples motores de expresiones regulares (POSIX y PCRE), por lo que dependiendo de qué funciones de expresión regular estés utilizando dependerá de qué tan bien se convertirán.

Si utilizaste principalmente las funciones preg_*, estas deberían convertirse sin problemas, sin embargo, creo que la implementación de Python de las expresiones regulares carece de algunas características más avanzadas que se incluyen en la implementación de PHP.

Puede leer sobre PHP's regular expressions here y Python's regular expressions here y descubrir algunas cosas más específicas.

Buena pregunta, pero es difícil dar una respuesta completa ya que hay muchas variables.

9

Son compatibles en su mayor parte. Sin embargo, existen algunas diferencias, aparte de la sintaxis diferente (/regex/ en PHP vs.re.compile(r"regex") en Python):

  1. PCRE apoya \Q...E escapar metacaracteres, Python no lo hace.
  2. PCRE admite \cA-\cZ coincidencia de caracteres de control, Python no lo hace.
  3. Guión en [\d-z] o [a-\d] es un literal en PHP, no en Python.
  4. PCRE admite \z (final de cadena), Python no, solo \Z (final de cadena antes del salto de línea final opcional).
  5. \b coincidirá con los límites de las palabras solo alrededor de los caracteres ASCII en PCRE, en Python puede coincidir con la configuración regional si se establece la opción.
  6. Puede consultar las referencias de \1 etc. antes de capturar paréntesis en PCRE, no se puede en Python.
  7. No puede desactivar los modificadores de modo dentro de la expresión regular ((?-s) etc.) en Python.
  8. No se obtiene la agrupación atómica (?>...) ni los cuantificadores posesivos (.++) en Python, solo en PCRE.
  9. Lookbehind puede ser de longitud finita en PCRE, debe ser de longitud fija en Python.
  10. No existe el patrón \G (ubicación de la coincidencia anterior).
  11. Sin concordancia condicional en Python, solo en PCRE: (?(?=regex)then|else).
  12. No \x1234 para la coincidencia de puntos de código Unicode en Python. No p{L} y otra coincidencia de propiedad Unicode, tampoco. En PHP, depende de cómo se configura/compila.
  13. No [:alpha:] Clases de caracteres POSIX en Python.

Recolectado de regular-expressions.info, dejando de lado algunas de las cosas más esotéricas. Pero no mucho.

Moral: Compre RegexBuddy y úselo para traducir las expresiones regulares por usted.