7.90 Expressions régulières compatibles Perl 
7 Index des fonctions 
 Manuel PHP 
 . Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . Exemples . options de recherche ->syntaxe des masques . preg_grep . preg_match_all . preg_match . preg_quote . preg_replace_callback . preg_replace . preg_split
 
  | 
 
  7.90.9 syntaxe des masques()
      Fonctionnement des expressions régulières.
    [ Exemples avec ern.syntax ]   CVS uniquement 
      La bibliothèque PCRE est un ensemble de fonctions qui
      implémentent la recherche par expressions
      régulières, en utilisant la même syntaxe
      et la même sémantique que le Perl 5, avec quelques
      nuances (voir ci-dessous). L'implémentation actuelle
      est celle de Perl 5.005.
     
 
     Les différences avec le Perl 5.005 sont présentée 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() retourne
        
TRUE
  pour les espaces, les retours chariot, les
       nouvelles lignes, les formfeed, les tabulations verticales et horizontales.
       Le 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
       version 5.004 et 5.005, l'option \s l'ignore.
	  
 
- 
       PRCE 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 "\0" dans le masque
       pour rechercher les caractères nul.
	  
 
- 
       Les séquence d'échappement suivantes ne sont pas
       supportées par le Perl: \l, \u, \L, \U, \E,
       \Q. En fait, elles sont implémentées par la gestion
       intrinsèque de chaînes du 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})
 .
	  
 
- 
       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 avec retour (lookbehind) soit obligée
          d'apparier une chaîne de longueur fixe, toutes les assertions avec
          retour 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 
          n'est pas activé, le méta caractè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ée comme une erreur.
         
 
- 
          (d) SI  PCRE_UNGREEDY  est
          activé, la "gourmandise" des quantificateurs de
          répétition est inversées, ce qui est rend non
          gourmand par défaut, mais s'ils sont suivis de ?, il seront
          gourmands.
         
 
 
 
 
 
 |