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 "?".