<?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.back-references.php',
    1 => 'R&eacute;f&eacute;rences arri&egrave;res',
    2 => 'R&eacute;f&eacute;rences arri&egrave;res',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Fonctionnement des expressions r&eacute;guli&egrave;res',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.repetition.php',
    1 => 'R&eacute;p&eacute;titions',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.assertions.php',
    1 => 'Assertions',
  ),
  '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.back-references" class="section">
  <h2 class="title">Références arrières </h2>
  <p class="para">
   En dehors des classes de caractères, un antislash suivi
   d&#039;un nombre plus grand que 0 (et possiblement plusieurs chiffres)
   est une référence arrière vers un sous-masque capturant situé plus tôt
   (c&#039;est-à-dire à sa gauche) dans le masque,
   en supposant qu&#039;il y ait
   suffisamment de sous-masques capturants précédents.
  </p>
  <p class="para">
   Cependant, si le nombre décimal suivant l&#039;antislash est
   plus petit que 10, il sera toujours considéré
   comme une référence arrière, et cela
   générera une erreur si le nombre de captures
   n&#039;est pas suffisant. En d&#039;autres termes, pour les nombres inférieurs à 10,
   les parenthèses référencées n&#039;ont pas besoin de se trouver à gauche
   de la référence. Une &quot;référence arrière vers l&#039;avant&quot; peut avoir du sens
   lorsqu&#039;une répétition est en jeu et que le sous-masque situé à droite a
   participé à une itération précédente. Voir la section sur les
   <a href="regexp.reference.escape.php" class="link">séquences d&#039;échappement</a>
   pour plus de détails sur le traitement des chiffres qui suivent l&#039;antislash.
  </p>
  <p class="para">
   La référence arrière remplace ce qui a
   été capturé par un sous-masque dans le
   masque courant, plutôt que remplacer le sous-masque
   lui-même. Ainsi
   
   <code class="literal">(calme|rapide) et \1ment</code>
   
   trouvera &quot;<code class="literal">calme et calmement</code>&quot;
   et &quot;<code class="literal">rapide et rapidement</code>&quot;, mais pas
   &quot;<code class="literal">calme et rapidement</code>&quot;. Si la recherche tient
   compte de la casse, alors la casse de la chaîne
   capturée sera importante. Par exemple,
   
   <code class="literal">((?i)rah)\s+\1</code>
   
   trouve &quot;<code class="literal">rah rah</code>&quot;
   et &quot;<code class="literal">RAH RAH</code>&quot;, mais pas &quot;<code class="literal">RAH rah</code>&quot;,
   même si le sous-masque capturant initial ne tenait pas compte
   de la casse.
  </p>
  <p class="para">
   Il peut y avoir plusieurs références arrière dans
   le même sous-masque. Si un sous-masque n&#039;a pas été
   utilisé dans une recherche, alors les références
   arrière échoueront. Par exemple
   
   <code class="literal">(a|(bc))\2</code>
   
   ne réussira jamais si la chaîne sujet commence par
   &quot;<code class="literal">a</code>&quot; plutôt que par &quot;<code class="literal">bc</code>&quot;.
   Étant donné qu&#039;il peut y avoir jusqu&#039;à 99 références
   arrière, tous les chiffres après l&#039;antislash sont
   considérés comme faisant potentiellement partie de
   la référence arrière. Si le masque recherche un
   chiffre après la référence, alors il faut
   impérativement utiliser des délimiteurs pour terminer
   la référence arrière.
   Si l&#039;option <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>
   est activée, on peut utiliser un espace.
   Sinon, un commentaire vide fait l&#039;affaire.
  </p>
  <p class="para">
   Une référence arrière qui intervient à l&#039;intérieur de
   parenthèses auxquelles elle fait référence
   échouera dès que le sous-masque sera utilisé. Par exemple,
   
   <code class="literal">(a\1)</code>
   
   échouera toujours. Cependant, ces
   références peuvent être utiles dans les
   sous-masques répétitifs. Par exemple, le masque
   &quot;<code class="literal">(a|b\1)+</code>&quot; pourra convenir pour &quot;<code class="literal">a</code>&quot;,
   &quot;<code class="literal">aba</code>&quot;, &quot;<code class="literal">ababba</code>&quot;, etc.
   À chaque itération du sous-masque, la référence
   arrière utilise la chaîne trouvée à l&#039;itération précédente.
   Pour que cela fonctionne, il faut que la première
   itération n&#039;ait pas besoin d&#039;utiliser la référence
   arrière. Cela arrive avec les alternatives, comme dans
   l&#039;exemple ci-dessus, ou avec un quantificateur de minimum 0.
  </p>
  <p class="para">
   La séquence d&#039;échappement <code class="literal">\g</code>
   peut être utilisée pour le référencement absolu et relatif des
   sous-masques. Cette séquence doit être suivie par un nombre non signé
   ou négatif, entouré optionnellement par des accolades. La séquence
   <code class="literal">\1</code>, <code class="literal">\g1</code> et <code class="literal">\g{1}</code>
   sont identiques. L&#039;utilisation de ce masque avec un nombre non signé peut
   aider à lever l&#039;ambiguïté inhérente aux chiffres qui suivent un
   antislash. Cette séquence aide à distinguer les références arrière
   des caractères octaux et rend également plus facile
   d&#039;avoir une référence arrière suivie par un nombre littéral, c.-à-d.
   <code class="literal">\g{2}1</code>.
  </p>
  <p class="para">
   L&#039;utilisation de la séquence <code class="literal">\g</code> avec un nombre négatif
   indique une référence relative. Par exemple, <code class="literal">(foo)(bar)\g{-1}</code>
   trouvera la séquence &quot;foobarbar&quot; et <code class="literal">(foo)(bar)\g{-2}</code> trouvera
   la séquence &quot;foobarfoo&quot;. Ceci peut être pratique dans les longs masques,
   comme alternative au fait de tenir le compte des sous-masques pour
   référencer un sous-masque précédent particulier.
  </p>
  <p class="para">
   Les références arrière du sous-masque nommé peuvent être
   utilisées sous la forme
   <code class="literal">(?P=name)</code>,
   <code class="literal">\k&lt;name&gt;</code>, <code class="literal">\k&#039;name&#039;</code>,
   <code class="literal">\k{name}</code>, <code class="literal">\g{name}</code>,
   <code class="literal">\g&lt;name&gt;</code> ou <code class="literal">\g&#039;name&#039;</code>.
  </p>
 </div><?php manual_footer($setup); ?>