Differenze rispetto a Perl
In questo capitolo saranno descritte le differenze rispetto a Perl 5.005.
-
Per default, lo spazio bianco indica tutti i caratteri riconoscibili
dalla funzione isspace() della libreria C, ciò non pregiudica la
possibilità di compilare PCRE con un set di caratteri alternativi.
Normalmente isspace() riconosce gli spazi, il salto pagina, il carattere 'a capo' (newline),
il carattere carriage return, la tabulazione orizzontale e verticale. Perl 5 non
riconosce nel set dei caratteri indicati dallo "spazio bianco" la tabulazione verticale.
Infatti il carattere di escape \v è stato presente per diverso tempo nella
documentazione di Perl, ma di fatto non viene riconosciuto. Tuttavia lo
stesso carattere viene trattato come spazio bianco fino alla versione 5.002 di Perl.
Nelle versioni 5.004 e 5.005 non viene riconosciuto il carattere \s.
-
PCRE non supporta occorrenze ripetute in espressioni che "guardano avanti".
Perl lo permette, ma non nel modo a cui si possa pensare. Ad esempio,
(?!a){3}, non indica che i tre caratteri successivi non debbano essere
delle "a", ma indica per tre volte che il carattere successivo non
debba essere una "a".
-
Il riconoscimento di criteri parziali che possono verificarsi
all'interno di espressioni che "guardano avanti" negative
sono contati, ma i loro riferimenti non sono inseriti nel
vettore degli offset. Perl valorizza le sue variabili da
qualsiasi criterio che sia riconosciuto prima che l'espressione
regolare fallisca nel riconoscere qualcosa (riuscendo in tal modo), ma questo solo se
l'espressione che "guarda avanti" contiene almeno un ramo alternativo.
-
Sebbene il carattere di 0 binario sia supportato nella stringa in cui si
deve svolgere la ricerca, non è ammesso nel testo dell'espressione regolare,
questo perché il testo viene passato come stringa C conclusa dal carattere zero.
Si può comunque utilizzare la sequenza "\\x00" per richiedere il riconoscimento dello zero binario.
-
Non sono supportate le seguenti sequenze di escape di Perl:
\l, \u, \L, \U. Infatti queste sono implementate
nelle funzioni di gestione delle stringhe di Perl e non nel
suo motore di riconoscimento delle espressioni regolari.
-
L'asserzione di Perl \G non è supportata poiché non è
rilevante per il riconoscimento di espressioni singole.
-
Ovviamente PCRE non supporta il costrutto (?{code}) e (??{code}).
Comunque, le espressioni ricorsive sono supportate.
-
Al momento in cui si scrive, in Perl 5.005_02 vi sono alcune particolarità
riguardanti la parametrizzazione delle stringhe catturate quando
parte del criterio di riconoscimento viene ripetuto. Ad esempio, il riconoscimento
di "aba" con il criterio /^(a(b)?)+$/, valorizza $2 con la lettera "b",i
usando il testo "aabbaa" con il criterio /^(aa(bb)?)+$/ non si ha la
valorizzazione di $2. Tuttavia se il criterio di riconoscimento viene
variato in /^(aa(b(b))?)+$/, sia $2 che $3 vengono valorizzate.
Nelle versione 5.004 di Perl, la variabile $2 viene valorizzata in
entrambi i casi, come pure è
TRUE
in PCRE. Se in futuro Perl cambierà
nella gestione anche PCRE potrà cambiare di conseguenza.
-
Un'altra discrepanza non ancora risolta riguarda il criterio di
riconoscimento /^(a)?(?(1)a|b)+$/, che in Perl 5.005_02 riconosce
la stringa "a", mentre non accade in PCRE. Tuttavia in entrambi
( Perl e PCRE ) il riconoscimento di "a" con il criterio /^(a)?a/ non valorizza $1.
-
PCRE prevede alcune estensioni per la gestione delle
espressioni regolari di Perl:
-
Sebbene le asserzioni che "guardano indietro" richiedano testi di
lunghezza fissa, è ammesso che ciascun ramo alternativo del criterio
di ricerca possa intercettare stringhe di lunghezza differente.
Al contrario Perl 5.005 richiede che tutte le stringhe abbiamo la stessa lunghezza.
-
Se viene settato PCRE_DOLLAR_ENDONLY
e non viene attivato PCRE_MULTILINE,
il meta-carattere $ indica soltanto la fine della
stringa.
-
Se si attiva PCRE_EXTRA,
un carattere backslash (\) seguito da una lettera che
non abbia un significato speciale genera un errore.
-
Se si attiva PCRE_UNGREEDY,
si inverte la "voracità" delle occorrenze, in modo da non
essere voraci per default, ma lo tornano ad essere se
seguiti da "?".