<?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.assertions.php',
    1 => 'Afirma&ccedil;&otilde;es',
    2 => 'Afirma&ccedil;&otilde;es',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Sintaxe das express&otilde;es regulares PCRE',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.back-references.php',
    1 => 'Refer&ecirc;ncias retroativas',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.onlyonce.php',
    1 => 'Sub-express&otilde;es de ocorr&ecirc;ncia &uacute;nica',
  ),
  '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.assertions" class="section">
  <h2 class="title">Afirmações</h2>
  <p class="para">
   Uma afirmação é um teste nos caracteres posteriores ou
   anteriores ao ponto atual de correspondência que efetivamente não
   consome nenhum caractere. As afirmações simples codificadas como \b,
   \B, \A, \Z, \z, ^ e $ estão descritas na seção sobre <a href="regexp.reference.escape.php" class="link">sequências de escape</a>. Afirmações mais
   complexas são codificadas como sub-expressões. Existem dois
   tipos: aquelas que <em>olham para frente</em> da posição atual na
   string de entrada e aquelas que <em>olham para trás</em> dela.
  </p>
  <p class="para">
   Uma sub-expressão de afirmação é correspondida da maneira usual, exceto
   que ela não faz com que a posição atual de correspondência seja
   alterada. Afirmações que olham <em>para frente</em> iniciam com (?= para afirmações
   positivas e com (?! para afirmações negativas. Por exemplo,

   <code class="literal">\w+(?=;)</code>

   corresponde a uma palavra seguida por ponto-e-vírgula, mas não inclui
   o ponto-e-vírgula na correspondência, e

   <code class="literal">foo(?!bar)</code>

   corresponde a qualquer ocorrência de &quot;foo&quot; que não seja seguida por
   &quot;bar&quot;. Observe que a expressão aparentemente similar

   <code class="literal">(?!foo)bar</code>

   não encontra uma ocorrência de &quot;bar&quot; que seja precedida por
   algo além de &quot;foo&quot;; ela encontra qualquer ocorrência de &quot;bar&quot;
   de todo modo, porque a afirmação (?!foo) é sempre <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
   quando os três próximos caracteres são &quot;bar&quot;. Uma afirmação que
   olha para trás é necessária para conseguir este efeito.
  </p>
  <p class="para">
   Afirmações que olham <em>para trás</em> iniciam com (?&lt;= para afirmações positivas
   e (?&lt;! para afirmações negativas. Por exemplo,

   <code class="literal">(?&lt;!foo)bar</code>

   encontra uma ocorrência de &quot;bar&quot; que não seja precedida por
   &quot;foo&quot;. O conteúdo de uma afirmação que olha para trás é restrito
   de modo que todas as strings às quais ela corresponde precisam ter um comprimento
   fixo. No entanto, se houver várias alternativas elas não
   precisam ter todas o mesmo comprimento fixo. Assim,

   <code class="literal">(?&lt;=bullock|donkey)</code>

   é permitido, mas

   <code class="literal">(?&lt;!dogs?|cats?)</code>

   causa um erro no momento da compilação. Ramos que correspondem a strings
   de comprimento diferente são permitidas somente no nível mais alto de
   uma afirmação que olha para trás. Isto é uma extensão quando comparado com
   o Perl 5.005, que requer que todos os ramos correspondam ao mesmo
   comprimento de string. Uma afirmação como

   <code class="literal">(?&lt;=ab(c|de))</code>

   não é permitida, porque seu ramo único no nível mais alto pode
   corresponder a dois comprimentos diferentes, mas é aceitável se for re-escrita
   para usar dois ramos no nível mais alto:

   <code class="literal">(?&lt;=abc|abde)</code>

   A implementação de afirmações que olham para trás é, para cada
   alternativa, mover temporariamente a posição atual para trás
   pela largura fixa e então tentar a correspodência. Se houver
   caracteres insuficientes antes da posição atual, a
   correspondência falhará. Afirmações que olham para trás em conjunção com
   sub-expressões de ocorrência única podem ser particularmente úteis para ter correspondência
   nos finais de strings; um exemplo é mostrado no final
   da seção sobre sub-expressões de ocorrência única.
  </p>
  <p class="para">
   Várias afirmações (de qualquer tipo) podem ocorrer sucessivamente.
   Por exemplo,

   <code class="literal">(?&lt;=\d{3})(?&lt;!999)foo</code>

   corresponde a &quot;foo&quot; precedida por três dígitos que não são &quot;999&quot;.
   Note que cada afirmação é aplicada independentemente
   no mesmo ponto da string de entrada. Primeiro é
   verificado se os três caracteres anteriores são todos dígitos
   e depois é verificado se os mesmos três caracteres não são
   &quot;999&quot;. Esta expressão não corresponde a &quot;foo&quot; precedida por seis
   caracteres, os primeiros três dos quais são dígitos e os últimos três
   deles não são &quot;999&quot;. Por exemplo, ela não corresponde a
   &quot;123abcfoo&quot;. Uma expressão para fazer isso é

   <code class="literal">(?&lt;=\d{3}...)(?&lt;!999)foo</code>
  </p>
  <p class="para">
   Agora a primeira afirmação olha para os seis caracteres
   precedentes, verificando se os primeiros três são dígitos e
   depois a segunda afirmação verifica se os três caracteres
   precedentes não são &quot;999&quot;.
  </p>
  <p class="para">
   Afirmações podem ser aninhadas em qualquer combinação. Por exemplo,

   <code class="literal">(?&lt;=(?&lt;!foo)bar)baz</code>

   corresponde a uma ocorrência de &quot;baz&quot; que é precedida por &quot;bar&quot;
   que por sua vez não é precedida por &quot;foo&quot;, enquanto que

   <code class="literal">(?&lt;=\d{3}...(?&lt;!999))foo</code>

   é outra expressão que corresponde a &quot;foo&quot; precedida por três
   dígitos e quaisquer três caracteres que não sejam &quot;999&quot;.
  </p>
  <p class="para">
   Sub-expressões de afirmação não são sub-expressões de captura, e podem
   não ser repetidas, porque não faz sentido afirmar a
   mesmo coisa várias vezes. Se qualquer tipo de afirmação coniver
   sub-expressões de captura dentro dela, estas são contadas para os
   propósitos de numeração dos grupos de captura em toda
   a expressão. Porém, a captura de substring acontece somente
   para afirmações positivas, porque não faz sentido para
   afirmações negativas.
  </p>
  <p class="para">
   Afirmações contam até o máximo de 200 sub-expressões
   entre parênteses.
  </p>
 </div><?php manual_footer($setup); ?>