<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/reference.pcre.pattern.syntax.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.escape.php',
    1 => 'S&eacute;quences d\'&eacute;chappement',
    2 => 'S&eacute;quences d\'&eacute;chappement',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Fonctionnement des expressions r&eacute;guli&egrave;res',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.meta.php',
    1 => 'M&eacute;tacaract&egrave;res',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.unicode.php',
    1 => 'Propri&eacute;t&eacute;s des caract&egrave;res Unicode',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/pcre/pattern.syntax.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="regexp.reference.escape" class="section">
  <h2 class="title">Séquences d&#039;échappement</h2>
  <p class="para">
   Le caractère antislash a de nombreuses utilisations.
   En premier lieu, s&#039;il est suivi d&#039;un caractère non
   alphanumérique, il ne prendra pas la signification
   spéciale qui y est rattachée. Cette utilisation de
   l&#039;antislash comme caractère de protection s&#039;applique
   à l&#039;intérieur et à l&#039;extérieur des
   classes de caractères.
  </p>
  <p class="para">
   Par exemple, pour rechercher le
   caractère étoile &quot;<code class="literal">*</code>&quot;, il faut
   écrire dans le masque : &quot;<code class="literal">\*</code>&quot;. Cela
   s&#039;applique dans tous les cas, que le caractère qui suive
   soit un métacaractère ou non. C&#039;est un moyen sûr
   pour s&#039;assurer qu&#039;un caractère sera recherché
   pour sa valeur littérale, plutôt que pour sa valeur
   spéciale. En particulier, pour rechercher les antislashs,
   il faut écrire : &quot;<code class="literal">\\</code>&quot;.
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    La <a href="language.types.string.php#language.types.string.syntax" class="link">chaîne de caractères</a> PHP
    simple ou double guillemet a une signification spéciale des antislashs. Donc,
    si \ doit être recherché avec une expression rationnelle \\, alors
    &quot;\\\\&quot; ou &#039;\\\\&#039; doit être utilisé dans le code PHP.
   </p>
  </p></blockquote>
  <p class="para">
   Si un masque est utilisé avec l&#039;option
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>,
   les espaces blancs du masque, mais qui ne sont pas dans une
   classe de caractères et les caractères entre dièse
   &quot;<code class="literal">#</code>&quot;, ainsi que les nouvelles lignes sont ignorées.
   L&#039;antislash peut être utilisé pour les protéger et ainsi
   rechercher un espace ou un dièse.
  </p>
  <p class="para">
   La deuxième utilité de l&#039;antislash est de pouvoir
   coder des caractères invisibles dans les masques. Il n&#039;y
   a pas de restriction sur la place de ces caractères
   invisibles, hormis pour le caractère nul qui doit terminer
   le masque.
   Lors de la préparation du masque, il est souvent plus pratique
   d&#039;utiliser les séquences d&#039;échappement suivantes,
   plutôt que le caractère binaire qu&#039;elles représentent :
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\a</em></dt>
     <dd>
      <span class="simpara">
       alarme, c&#039;est-à-dire le caractère BEL (hex 07)
      </span>
     </dd>
    
    
     <dt><em>\cx</em></dt>
     <dd>
      <span class="simpara">
       &quot;contrôle-x&quot;, avec x qui peut être n&#039;importe quel
       caractère.
      </span>
     </dd>
    
    
     <dt><em>\e</em></dt>
     <dd>
      <span class="simpara">
       escape (hex 1B)
      </span>
     </dd>
    
    
     <dt><em>\f</em></dt>
     <dd>
      <span class="simpara">
       formfeed (hex 0C)
      </span>
     </dd>
    
    
     <dt><em>\n</em></dt>
     <dd>
      <span class="simpara">
       nouvelle ligne (hex 0A)
      </span>
     </dd>
    
    
     <dt><em>\p{xx}</em></dt>
     <dd>
      <span class="simpara">
       un caractère avec une propriété xx, voir
       les <a href="regexp.reference.unicode.php" class="link">propriétés unicode</a> 
       pour plus d&#039;informations
      </span>
     </dd>
    
    
     <dt><em>\P{xx}</em></dt>
     <dd>
      <span class="simpara">
       un caractère sans propriété xx, voir
       les <a href="regexp.reference.unicode.php" class="link">propriétés unicode</a> 
       pour plus d&#039;informations
      </span>
     </dd>
    
    
     <dt><em>\r</em></dt>
     <dd>
      <span class="simpara">
       retour chariot (hex 0D)
      </span>
     </dd>
    
    
     <dt><em>\R</em></dt>
     <dd>
      <span class="simpara">saut de ligne : satisfait par \n, \r et \r\n</span>
     </dd>
    
    
     <dt><em>\t</em></dt>
     <dd>
      <span class="simpara">
       tabulation (hex 09)
      </span>
     </dd>
    
    
     <dt><em>\xhh</em></dt>
     <dd>
      <span class="simpara">
       caractère en hexadécimal, de code hh
      </span>
     </dd>
    
    
     <dt><em>\ddd</em></dt>
     <dd>
      <span class="simpara">
       caractère en octal, de code ddd, ou référence
       arrière
      </span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Dans la séquence &quot;<code class="literal">\cx</code>&quot; si &quot;<code class="literal">x</code>&quot;
   est en minuscule, il est converti en majuscule. Puis, le bit 6 (hex 40)
   est inversé. Ainsi &quot;<code class="literal">\cz</code>&quot; devient hex 1A,
   mais &quot;<code class="literal">\c{</code>&quot; devient hex 3B, tandis que &quot;<code class="literal">\c;</code>&quot;
   devient hex 7B.
  </p>
  <p class="para">
   Après &quot;<code class="literal">\x</code>&quot;, deux caractères
   hexadécimaux sont lus (les lettres peuvent être en majuscule
   ou minuscule).
   En mode <em>UTF-8</em>, &quot;<code class="literal">\x{...}</code>&quot;
   est autorisée, où le contenu des accolades est une chaîne hexadécimale.
   Il sera interprété comme un caractère UTF-8 où le numéro de code est
   le numéro hexadécimal donné. La séquence d&#039;échappement hexadécimale
   originale, <code class="literal">\xhh</code>, correspond à un caractère UTF-8
   sur 2 octets si la valeur est plus grande que 127.
  </p>
  <p class="para">
   Après &quot;<code class="literal">\0</code>&quot;, deux caractères octaux sont lus.
   Dans chacun des cas, le métacaractère tente de lire autant
   de caractères que possible. Ainsi, la séquence
   &quot;<code class="literal">\0\x\07</code>&quot; sera comprise comme deux caractères nuls,
   suivis d&#039;un caractère alarme (BEL). Il faut s&#039;assurer que l&#039;on fournit
   suffisamment de chiffres après le métacaractère.
  </p>
  <p class="para">
   L&#039;antislash de fin suivi par un nombre autre que 0 est compliqué.
   À l&#039;extérieur d&#039;une classe de caractère, PCRE le lit, et tous les nombres
   qui suivent, en tant que nombres décimaux. Si le nombre est plus petit que
   10 ou s&#039;il y a eu au moins précédemment une parenthèse gauche capturante
   dans l&#039;expression, la séquence entière est prise en tant que <em>référence arrière</em>.
   Une description sur le fonctionnement est donnée plus tard, suivez la discussion
   sur les parenthèses des sous masques.
  </p>
  <p class="para">
   À l&#039;intérieur d&#039;un caractère de classe ou s&#039;il est plus
   grand que 9, et qu&#039;il n&#039;y a pas eu assez de parenthèses ouvrantes
   auparavant, PCRE lit jusqu&#039;à 3 chiffres octaux à la suite
   de l&#039;antislash, et génère un octet unique, à partir
   des 8 bits de poids faible de la séquence. Tous les chiffres qui
   suivent ne sont pas interprétés, et se représentent
   eux-mêmes. Par exemple:
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\040</em></dt>
     <dd>
      <span class="simpara">
       une autre manière d&#039;écrire un espace
      </span>
     </dd>
    
    
     <dt><em>\40</em></dt>
     <dd>
      <span class="simpara">
       identique, dans la mesure où il n&#039;y a pas 40
       parenthèses ouvrantes auparavant
      </span>
     </dd>
    
    
     <dt><em>\7</em></dt>
     <dd>
      <span class="simpara">
       est toujours une référence arrière
      </span>
     </dd>
    
    
     <dt><em>\11</em></dt>
     <dd>
      <span class="simpara">
       peut être une référence de retour,
       ou une tabulation
      </span>
     </dd>
    
    
     <dt><em>\011</em></dt>
     <dd>
      <span class="simpara">
       toujours une tabulation
      </span>
     </dd>
    
    
     <dt><em>\0113</em></dt>
     <dd>
      <span class="simpara">
       est une tabulation suivie du caractère &quot;3&quot;
      </span>
     </dd>
    
    
     <dt><em>\113</em></dt>
     <dd>
      <span class="simpara">
       est le caractère 113 (étant donné qu&#039;il ne
       peut y avoir plus de 99 références arrière)
      </span>
     </dd>
    
    
     <dt><em>\377</em></dt>
     <dd>
      <span class="simpara">
       est un octet dont tous les bits sont à 1
      </span>
     </dd>
    
    
     <dt><em>\81</em></dt>
     <dd>
      <span class="simpara">
       peut être soit une référence arrière,
       soit un zéro binaire suivi des caractères &quot;8&quot; et &quot;1&quot;
      </span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Les valeurs octales supérieures ou égales à 100 ne
   doivent pas être introduites par un 0, car seuls les trois premiers
   octets seront lus.
  </p>
  <p class="para">
   Toutes les séquences qui définissent une valeur d&#039;un seul
   octet peuvent être utilisées dans les classes de caractères,
   et à l&#039;extérieur. De plus, dans une classe de caractères,
   la séquence &quot;<code class="literal">\b</code>&quot; est interprétée
   comme un caractère effacer (hex 08). À l&#039;extérieur,
   elle peut avoir d&#039;autres significations
   (voir ci-dessous).
  </p>
  <p class="para">
   On peut encore se servir de l&#039;antislash pour préciser des types
   génériques de valeurs :
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\d</em></dt>
     <dd>
      <span class="simpara">
       tout caractère décimal
      </span>
     </dd>
    
    
     <dt><em>\D</em></dt>
     <dd>
      <span class="simpara">
       tout caractère qui n&#039;est pas un caractère décimal
      </span>
     </dd>
    
    
     <dt><em>\h</em></dt>
     <dd>
      <span class="simpara">
       n&#039;importe quel espace horizontal
      </span>
     </dd>
    
    
     <dt><em>\H</em></dt>
     <dd>
      <span class="simpara">
       n&#039;importe quel caractère qui n&#039;est pas un espace horizontal
      </span>
     </dd>
    
    
     <dt><em>\s</em></dt>
     <dd>
      <span class="simpara">
       tout caractère blanc
      </span>
     </dd>
    
    
     <dt><em>\S</em></dt>
     <dd>
      <span class="simpara">
       tout caractère qui n&#039;est pas un caractère blanc
      </span>
     </dd>
    
    
     <dt><em>\v</em></dt>
     <dd>
      <span class="simpara">
       n&#039;importe quel espace vertical
      </span>
     </dd>
    
    
     <dt><em>\V</em></dt>
     <dd>
      <span class="simpara">
       n&#039;importe quel caractère qui n&#039;est pas un espace vertical
      </span>
     </dd>
    
    
     <dt><em>\w</em></dt>
     <dd>
      <span class="simpara">
       tout caractère de &quot;mot&quot;
      </span>
     </dd>
    
    
     <dt><em>\W</em></dt>
     <dd>
      <span class="simpara">
       tout caractère qui n&#039;est pas un caractère de &quot;mot&quot;
      </span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Chaque paire précédente définit une partition de
   la table des caractères : les deux ensembles sont disjoints.
   Un caractère satisfera soit un métacaractère,
   soit l&#039;autre.
  </p>
  <p class="para">
   Les caractères &quot;blancs&quot; sont HT (9), LF (10), FF (12), CR (13), 
   et espace (32). Cependant, lors de l&#039;utilisation d&#039;une locale
   particulière, tous les caractères se trouvant dans l&#039;intervalle
   128-255 peuvent aussi être considérés comme caractère blanc, par exemple
   NBSP (A0).
  </p>
  <p class="para">
   Un caractère de &quot;mot&quot; sera une lettre, un chiffre ou le
   caractère souligné, c&#039;est-à-dire un
   caractère qui pourra être une partie d&#039;un <em>mot</em> Perl. La
   définition des lettres et chiffres est définie par les
   tables de caractères de PCRE, et peut varier suivant la table
   locale de caractères. Par exemple, dans la configuration &quot;français&quot; (&quot;fr&quot;),
   certains caractères ont des codes supérieurs à
   128, pour les caractères accentués, et ils seront compris
   par le métacaractère <code class="literal">\w</code>.
  </p>
  <p class="para">
   Ces séquences de caractères peuvent apparaître à
   l&#039;intérieur ou à l&#039;extérieur des classes de
   caractères. Elles remplacent à chaque fois un
   caractère du type correspondant. Si cette séquence est
   placée en fin de masque, et qu&#039;il n&#039;y a plus de caractère à
   comparer dans la chaîne sujet, la recherche échoue.
  </p>
  <p class="para">
   La quatrième utilisation de l&#039;antislash intervient lors d&#039;assertions
   simples. Une assertion impose une condition à un certain point,
   sans remplacer de caractère. L&#039;utilisation de sous-masques pour
   réaliser des assertions plus complexes est décrite
   plus bas. Les assertions avec antislash sont les suivantes :
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\b</em></dt>
     <dd>
      <span class="simpara">
       limite de mot
      </span>
     </dd>
    
    
     <dt><em>\B</em></dt>
     <dd>
      <span class="simpara">
       pas limite de mot
      </span>
     </dd>
    
    
     <dt><em>\A</em></dt>
     <dd>
      <span class="simpara">
       début de la chaîne sujet
       (indépendant du mode multilignes)
      </span>
     </dd>
    
    
     <dt><em>\Z</em></dt>
     <dd>
      <span class="simpara">
       fin de la chaîne sujet ou nouvelle ligne à
       la fin de la chaîne sujet
       (indépendant du mode multilignes)
      </span>
     </dd>
    
    
     <dt><em>\G</em></dt>
     <dd>
      <span class="simpara">
       position de la première occurrence trouvée dans la chaîne sujet
      </span>
     </dd>
    
    
     <dt><em>\z</em></dt>
     <dd>
      <span class="simpara">
       fin de la chaîne sujet
       (indépendant du mode multilignes)
      </span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Ces assertions ne peuvent pas apparaître dans une classe de
   caractères (mais &quot;<code class="literal">\b</code>&quot; a une autre signification à
   l&#039;intérieur d&#039;une classe de caractères).
  </p>
  <p class="para">
   Une limite de mot est un emplacement dans la chaîne sujet ou un
   caractère et son suivant ne sont pas en même temps des
   caractères de mot (<code class="literal">\w</code>), ou le contraire (<code class="literal">\W</code>)
   (on peut le voir comme <code class="literal">\w\W</code> ou <code class="literal">\W\w</code>), ou encore le
   premier ou le dernier caractère est un caractère mot (<code class="literal">\w</code>).
  </p>
  <p class="para">
   Les assertions <code class="literal">\A</code>, <code class="literal">\Z</code>, et
   <code class="literal">\z</code> diffèrent des métacaractères
   <code class="literal">^</code> et <code class="literal">$</code>
   (décrit dans <a href="regexp.reference.anchors.php" class="link">les ancres</a>)
   dans la mesure où ils ne sont pas dépendants des options, notamment
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>
   ou <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a>.
   La différence entre <code class="literal">\Z</code> et
   <code class="literal">\z</code> tient au fait que <code class="literal">\Z</code> recherche
   les positions avant les nouvelles lignes et à la fin de la
   chaîne sujet, tandis que <code class="literal">\z</code> ne recherche
   que la fin de la chaîne.
  </p>
  <p class="para">
   L&#039;assertion <code class="literal">\G</code> est réalisée uniquement lorsque
   la position courante de l&#039;occurrence trouvée est au début de l&#039;occurrence,
   comme spécifié par l&#039;argument <code class="parameter">offset</code> de la
   fonction <span class="function"><a href="function.preg-match.php" class="function">preg_match()</a></span>. Elle diffère de <code class="literal">\A</code>
   lorsque la valeur du paramètre <code class="parameter">offset</code> est différente
   de zéro.
  </p>
  <p class="para">
   <code class="literal">\Q</code> et <code class="literal">\E</code> peuvent être utilisés
   pour ignorer les métacaractères dans le masque.
   Par exemple : <code class="literal">\w+\Q.$.\E$</code> recherchera un ou plusieurs
   caractères suivis par la chaîne littérale <code class="literal">.$.</code> et ancrés à la
   fin de la chaîne.
   Il est à noter que ceci ne change pas le comportement des délimiteurs ;
   par exemple le masque <code class="literal">#\Q#\E#$</code> n&#039;est pas valide, car
   le second <code class="literal">#</code> marque la fin du masque, et que
   <code class="literal">\E#</code> est interprété comme un modificateur invalide.
  </p>
  <p class="para">
   <code class="literal">\K</code> peut être utilisé pour réinitialiser le résultat
   Par exemple, le masque <code class="literal">foo\Kbar</code> trouve
   &quot;foobar&quot;, mais reporte qu&#039;il a trouvé &quot;bar&quot;. L&#039;utilisation de
   <code class="literal">\K</code> n&#039;interfère pas avec la configuration des sous-chaînes capturantes.
   Par exemple, lorsque le masque <code class="literal">(foo)\Kbar</code>
   trouve &quot;foobar&quot;, la première sous-chaîne sera toujours &quot;foo&quot;.
  </p>
 </div><?php manual_footer($setup); ?>