Différences avec Perl
 
 
  Les différences avec Perl 5.005 sont présentées ici :
  
   - 
    
     Par défaut, un caractère d'espacement correspond à
     n'importe quel caractère que la fonction C isspace()reconnaît,
     bien qu'il soit possible de recompiler la bibliothèque PCRE avec
     d'autres tables de caractères. Normalement,isspace()retournetruepour les espaces, les retours chariot, les
     nouvelles lignes, les formfeed, les tabulations verticales et horizontales.
     Perl 5 n'accepte plus la tabulation verticale comme caractère
     d'espacement. La séquence \v qui était dans la documentation
     Perl depuis longtemps n'a jamais été reconnue. Cependant, la
     tabulation verticale elle-même était reconnue comme un
     caractère d'espacement jusqu'à la version 5.002. Avec les
     versions 5.004 et 5.005, l'option \s l'ignore.
- 
    
     PCRE ne tolère pas la répétition de quantificateurs
     dans les expressions. Perl le permet, mais cela ne signifie pas ce que vous
     pourriez penser. Par exemple, (?!a){3} ne s'interprète pas : les trois
     caractères suivants ne sont pas des "a". En fait, cela
     s'interprète comme : le caractère suivant n'est pas "a" trois fois.
    
   
- 
    
     Les occurrences de sous-masques qui interviennent dans des assertions
     négatives sont comptées, mais elles ne sont pas
     enregistrées dans le vecteur d'occurrences. Perl modifie ses
     variables numériques pour toutes les occurrences de sous-masque,
     avant que l'assertion ne vérifie le masque entier, et uniquement si
     les sous-masques ne trouvent qu'une seule occurrence.
    
   
- 
    
     Bien que les caractères nul soient tolérés dans la
     chaîne de recherche, ils ne sont pas acceptés dans le
     masque, car le masque est utilisé comme une chaîne C
     standard, terminée par le caractère nul. Il faut donc
     utiliser la séquence d'échappement "\x00" dans le masque
     pour rechercher les caractères nul.
    
    
- 
    
     Les séquences d'échappement suivantes ne sont pas
     supportées par Perl : \l, \u, \L, \U.
     En fait, elles sont implémentées par la gestion
     intrinsèque de chaînes Perl, et ne font pas partie
     de ses caractères spéciaux.
    
    
- 
    
     L'assertion \G du Perl n'est pas supportée car elle n'est pas
     pertinente pour faire des recherches avec des masques uniques.
    
    
- 
    
     De manière assez évidente, PCRE n'accepte pas la
     construction (?{code})et(??{code}).
     Cependant, les masques récursifs sont supportés.
- 
    
     Au moment de l'écriture de PCRE, Perl 5.005_02 avait quelques
     comportements étranges avec la capture des chaînes
     lorsqu'une partie du masque est redoublée. Par exemple, "aba" avec
     le masque /^(a(b)?)+$/ va affecter à $2 la valeur "b", mais la
     même manipulation avec "aabbaa" et /^(aa(bb)?)+$/ laissera $2 vide.
     Cependant, si le masque est remplacé par /^(aa(b(b))?)+$/ alors $2
     (et d'ailleurs $3) seront correctement affectés. Avec le Perl
     5.004, $2 sera correctement affecté dans les deux cas, et c'est
     aussi vrai avec PCRE. Si Perl évolue vers un autre comportement
     cohérent, PCRE s'adaptera probablement.
    
    
- 
    
     Une autre différence encore non résolue est le fait qu'en
     Perl 5.005_02 le masque /^(a)?(?(1)a|b)+$/ accepte la chaîne "a",
     tandis que PCRE ne l'accepte pas. Cependant, que ce soit avec Perl ou
     PCRE /^(a)?a/ et "a" laisseront $1 vide.
    
    
- 
    
     PCRE propose quelques extensions aux expressions régulières du Perl.
       
       - 
        
         (a) Bien que les assertions arrières (lookbehind) soient obligées
         de rechercher une chaîne de longueur fixe, toutes les assertions
         arrières peuvent avoir une longueur différente. Perl 5.005 leur
         impose d'avoir toutes la même longueur.
- 
       
        (b) Si PCRE_DOLLAR_ENDONLY est
        activé, et que PCRE_MULTILINE
        ne l'est pas, le métacaractère $ne s'applique qu'à
        la fin physique de la chaîne, et non pas avant les caractères
        de nouvelle ligne.
- 
       
        (c) Si PCRE_EXTRA est
        activé, un antislash suivi d'une lettre sans signification
        spéciale est considéré comme une erreur.
       
      
- 
       
        (d) Si PCRE_UNGREEDY est
        activé, la "gourmandise" des quantificateurs de
        répétition est inversée, ce qui est rend non
        gourmand par défaut, mais s'ils sont suivis de ?, il seront
        gourmands.