2010-06-18 13 views
12

Ho trovato questo post: Python Regex vs PHP Regex ma in realtà non ho ottenuto se la sintassi di REGEX di Python corrisponde alla sintassi di REGEX di PHP.REGEX differisce da PHP a Python

Ho iniziato a convertire un po 'del mio vecchio codice PHP in python (a causa di g appengine ecc.), E ora vorrei sapere se la regex è al 100% convertibile, con semplice copia & incolla.

saluti,

risposta

9

Python utilizza una sintassi simile alla sintassi Perl e PHP utilizza la sintassi Perl Compatible Regular Expressions, quindi dovrebbe essere quasi la stessa. Leggi l'eventuale differences.

L'unica vera differenza è che in PHP, l'espressione deve essere racchiusa tra delimiters.

+0

+ risposta giusta, anche tutti gli altri corrispondono bene, ma la tua risposta si adatta perfettamente alla domanda che avevo in mente =) Grazie a tutti gli altri, darò +1 per ogni risposta/commento/risposta –

1

Credo che siano almeno in gran parte compatibili, vale a dire> 2/3. Potrebbero esserci estensioni specifiche della lingua su entrambi i lati, ma il nucleo è decisamente lo stesso. Questa asserzione si basa esclusivamente sulla mia esperienza personale (limitata), quindi prendila con un pizzico di sale.

Entrambe le implementazioni sono basate su regex di Perl, se non sbaglio.

1

Non sono sicuro della risposta giusta, ma ho trovato uno strumento utile che aiuterà i test.

http://re.dabase.com/

Cheers!

+0

404, non trovato. – Qaz

+0

Prova invece regex101.com o regexpal.com. – Qaz

1

Dopo una rapida ricerca, ho scoperto che la differenza principale è:

PHP(ha delimitatori)

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

Python(è senza delimitatori)

REGEX # no surrounding by any characters 
+2

Come sottolineato da Felix, le barre in avanti sono definite delimitatori. –

1

I motori di espressioni regolari che sono costruiti in varie lingue di solito presentano differenze anche se la sintassi generale è la stessa. PHP ha più motori di espressioni regolari integrati (POSIX e PCRE), quindi a seconda di quali funzioni di espressioni regolari utilizzate dipenderà dal modo in cui verranno convertite.

Se si utilizzano principalmente le funzioni preg_*, quelle dovrebbero principalmente convertirsi senza problemi, tuttavia ritengo che l'implementazione di Python delle espressioni regolari manchi di alcune funzionalità più avanzate incluse nell'implementazione di PHP.

È possibile leggere circa PHP's regular expressions here e Python's regular expressions here e capire alcune cose più specifiche.

Buona domanda, ma difficile dare una risposta completa poiché ci sono molte variabili.

9

Sono compatibili per la maggior parte. Ci sono alcune differenze, tuttavia, a parte la diversa sintassi (/regex/ in PHP vs.re.compile(r"regex") in Python):

  1. PCRE supporta \Q...E di fuggire metacaratteri, Python non lo fa.
  2. PCRE supporta la corrispondenza del carattere di controllo \cA-\cZ, Python no.
  3. Trattino in [\d-z] o [a-\d] è un valore letterale in PHP, non in Python.
  4. PCRE supporta \z (end-of-string), Python no, solo \Z (fine-stringa prima dell'alimentazione finale opzionale).
  5. \b corrisponderà ai limiti di parola solo attorno ai caratteri ASCII in PCRE, in Python può corrispondere alle impostazioni locali in base all'impostazione dell'opzione.
  6. È possibile fare riferimento alle sottorubriche \1 ecc. Prima delle parentesi di acquisizione in PCRE, non è possibile in Python.
  7. Non è possibile disattivare i modificatori di modalità all'interno della regex ((?-s) ecc.) In Python.
  8. Non si ottiene il gruppo atomico (?>...) o quantificatori possessivi (.++) in Python, solo in PCRE.
  9. Lookbehind può avere una lunghezza finita in PCRE, deve essere di lunghezza fissa in Python.
  10. Non esiste il modello \G (posizione della corrispondenza precedente).
  11. Nessuna corrispondenza condizionale in Python, solo in PCRE: (?(?=regex)then|else).
  12. No \x1234 per i punti codice Unicode corrispondenti in Python. No p{L} e altre corrispondenze di proprietà Unicode. In PHP, dipende da come è configurato/compilato.
  13. No [:alpha:] Classi di caratteri POSIX in Python.

Raccolti da regular-expressions.info, tralasciando alcune delle cose più esoteriche. Ma non molto.

Morale: Acquista RegexBuddy e usalo per tradurre le espressioni regee per te.