<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.back-references.php',
    1 => 'Refer&ecirc;ncias retroativas',
    2 => 'Refer&ecirc;ncias retroativas',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Sintaxe das express&otilde;es regulares PCRE',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.repetition.php',
    1 => 'Repeti&ccedil;&atilde;o',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.assertions.php',
    1 => 'Afirma&ccedil;&otilde;es',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Referências retroativas</h2>
  <p class="para">
   Fora de uma classe de caracteres, uma barra invertida seguida por um dígito
   maior que 0 (e possivelmente dígitos adicionais) é uma referência
   retroativa a um grupo de captura realizada anteriormente (isto é, à sua
   esquerda) na expressão, desde que tenha havido previamente essa quantidade
   de captura entre parênteses.
  </p>
  <p class="para">
   Porém, se um número decimal seguindo a barra invertida for
   menor que 10, ele sempre será interpretado como uma referência retroativa e
   causará um erro somente se não tiver havido essa quantidade de
   grupos de captura em toda a expressão. Em outras palavras, os
   parênteses que são referenciados não precisam estar à esquerda da
   referência para números menores que 10.
   Uma &quot;referência retroativa à frente&quot; pode fazer sentido quando uma repetição
   está envolvida e a sub-expressão à direita tenha participado
   de uma iteração anterior. Consulte a seção sobre
   <a href="regexp.reference.escape.php" class="link">sequências de escape</a> para detalhes adicionais da manipulação
   de dígitos que seguem uma barra invertida.
  </p>
  <p class="para">
   Uma referência retroativa corresponde a qualquer coisa que verdadeiramente correspondeu à sub-expressão
   de captura na string de entrada atual, e não
   a qualquer coisa que corresponda à sub-expressão em si. Portanto, a expressão

   <code class="literal">(sens|respons)e and \1ibility</code>

   corresponde a &quot;sense and sensibility&quot; e &quot;response and responsibility&quot;,
   mas não a &quot;sense and responsibility&quot;. Se a correspondência for sensível a
   maiúsculas/minúsculas no momento da referência retroativa, a forma
   das letras será relevante. Por exemplo,

   <code class="literal">((?i)rah)\s+\1</code>

   corresponde a &quot;rah rah&quot; e &quot;RAH RAH&quot;, mas não a &quot;RAH rah&quot;, embora
   a sub-expressão de captura original seja correspondida
   de forma insensível a maiúsculas/minúsculas.
  </p>
  <p class="para">
   Pode haver mais que uma referência retroativa à mesma sub-expressão.
   Se uma sub-expressão não tiver sido usada em uma correspondência
   em particular, qualquer referência retroativa a ela sempre
   falhará. Por exemplo, a expressão

   <code class="literal">(a|(bc))\2</code>

   sempre falhará se ele iniciar correspondendo a &quot;a&quot; ao invés de &quot;bc&quot;.
   Como podem haver até 99 referências retroativas, todos os dígitos
   seguindo a barra invertida são consideradas como parte de um potencial número
   de identificador de referência retroativa. Se a expressão continua com um caractere de
   dígito, algum delimitador precisa ser usado para terminar a
   referência retroativa. Se a opção <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>
   estiver definida, o delimitador pode ser um espaço em branco. Caso contrário um comentário vazio pode ser usado.
  </p>
  <p class="para">
   Uma referência retroativa que ocorre dentro dos parênteses aos quais ela
   se refere falha quando a sub-expressão é usada pela primeira vez, portanto, por
   exemplo, (a\1) nunca será correspondida. No entanto, tais referências podem
   ser úteis dentro de sub-expressões repetidas. Por exemplo, a expressão

   <code class="literal">(a|b\1)+</code>

   corresponde a qualquer número de &quot;a&quot;s e também a &quot;aba&quot;, &quot;ababba&quot; etc. A
   cada iteração da sub-expressão, a referência retroativa corresponde
   à string de caracteres relativa à iteração anterior.
   Para que isso funcione, a expressão precisa ser tal
   que a primeira iteração não precise corresponder à referência
   retroativa. Isto pode ser feito usando alternância, como no
   exemplo acima, ou por um quantificador com um mínimo de zero.
  </p>
  <p class="para">
   A sequência de escape <code class="literal">\g</code> pode ser
   usada para referências absolutas e relativas de sub-expressões.
   Esta sequência de escape precisa ser seguida por um número sem sinal ou
   negativo, opcionalmente envolvido por chaves. As sequências <code class="literal">\1</code>,
   <code class="literal">\g1</code> e <code class="literal">\g{1}</code> são sinônimos
   entre si. O uso desta expressão com um número sem sinal pode
   ajudar a remover a ambiguidade inerente ao usar dígitos após uma
   barra invertida. A sequência ajuda a distinguir referências de caracteres
   octais e também torna mais fácil ter uma referência seguida
   por um número literal, ex.: <code class="literal">\g{2}1</code>.
  </p>
  <p class="para">
   O uso da sequência <code class="literal">\g</code> com um número negativo
   significa uma referência relativa. Por exemplo, <code class="literal">(foo)(bar)\g{-1}</code>
   corresponderia à sequência &quot;foobarbar&quot; e <code class="literal">(foo)(bar)\g{-2}</code>
   corresponderia a &quot;foobarfoo&quot;. Isto pode ser útil em expressões longas como uma alternativa
   para manter rastreamento do número de sub-expressões para referenciar
   uma sub-expressão anterior específica.
  </p>
  <p class="para">
   Referências às sub-expressões nomeadas podem ser obtidas com
   <code class="literal">(?P=nome)</code>,
   <code class="literal">\k&lt;nome&gt;</code>, <code class="literal">\k&#039;nome&#039;</code>,
   <code class="literal">\k{nome}</code>, <code class="literal">\g{nome}</code>,
   <code class="literal">\g&lt;nome&gt;</code> ou <code class="literal">\g&#039;nome&#039;</code>.
  </p>
 </div><?php manual_footer($setup); ?>