<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/pcre.pattern.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'reference.pcre.pattern.differences.php',
    1 => 'Diferen&ccedil;as para o Perl',
    2 => 'Diferen&ccedil;as para o Perl',
  ),
  'up' => 
  array (
    0 => 'pcre.pattern.php',
    1 => 'Express&otilde;es PCRE',
  ),
  'prev' => 
  array (
    0 => 'reference.pcre.pattern.modifiers.php',
    1 => 'Poss&iacute;veis modificadores em express&otilde;es regulares',
  ),
  'next' => 
  array (
    0 => 'ref.pcre.php',
    1 => 'Fun&ccedil;&otilde;es da PCRE',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/pcre/pattern.differences.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="reference.pcre.pattern.differences" class="article">
 <h1 class="title">Diferenças para o Perl</h1>

 
 <p class="para">
  As diferenças descritas aqui referem-se ao Perl 5.005.
  <ol type="1">
   <li class="listitem">
    <span class="simpara">
     Por padrão, um caractere de espaço em branco é qualquer caractere que
     a função isspace() da biblioteca C reconhece, embora seja
     possível compilar PCRE com tabelas de tipos de caracteres
     alternativas. Normalmente isspace() corresponde a espaço, alimentação de formulário,
     nova linha, retorno de carro, tabulação horizontal e tabulação vertical. Perl 5 não
     inclui mais a tabulação vertical em seu conjunto de caracteres de espaço em branco.
     O escape \v que esteve na documentação do Perl por
     muito tempo nunca foi de fato reconhecido. No entanto, o caractere
     em si foi tratado como espaço em branco pelo menos até a versão 5.002.
     Na 5.004 e na 5.005, ele não corresponde a \s.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     O PCRE não permite quantificadores repetidos em afirmações
     antecipadas. O Perl permite isso, mas eles não significam o que
     se imagina. Por exemplo, (?!a){3} não afirma que os
     próximos três caracteres não são &quot;a&quot;. Apenas afirma que o
     próximo caractere não é “a” três vezes.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     A captura de sub-expressões que ocorrem dentro de afirmações
     antecipadas negativas são contadas, mas suas entradas no
     vetor de deslocamentos nunca são definidas. O Perl define suas variáveis ​​
     numéricas a partir de quaisquer expressões que sejam correspondidas antes que a
     afirmação falhe em corresponder a algo (deste modo tendo sucesso), mas
     apenas se a afirmação antecipada negativa contiver apenas uma
     ramificação.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Embora caracteres zero binários sejam suportados na string de entrada,
     eles não são permitidos na string da expressão (antes do PHP 8.2) porque ela é passada como uma
     string C normal, terminada por zero. A sequência de escape &quot;\x00&quot; pode
     ser usada na expressão para representar um zero binário. A partir do PHP 8.2, caracteres NUL \0 são suportados na string da expressão regular.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     As seguintes sequências de escape do Perl não são suportadas:
     \l, \u, \L, \U. Na verdade, eles são implementados pelo
     tratamento geral de strings do Perl e não fazem parte de seu
     mecanismo de correspondência de expressões.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     A asserção Perl \G não é suportada porque não é
     relevante para correspondências de expressões únicas.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Obviamente, a PCRE não suporta a construção (?{code}) e (??{code}).
     No entanto, há suporte para expressões recursivas.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     No momento em que este artigo foi escrito, havia algumas curiosidades no Perl
     5.005_02 relacionadas às configurações de strings capturadas
     quando parte de uma expressão é repetida. Por exemplo, corresponder
     &quot;aba&quot; com a expressão /^(a(b)?)+$/ define $2 como o valor
     &quot;b&quot;, mas corresponder &quot;aabbaa&quot; com /^(aa(bb)?)+$/ deixa $2
     indefinido. No entanto, se a expressão for alterada para
     /^(aa(b(b))?)+$/ então $2 (e $3) serão definidos.
     No Perl 5.004, $2 é definido em ambos os casos, e isso também é <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
     na PCRE. Se no futuro o Perl mudar para um estado consistente
     diferente, a PCRE poderá mudar para seguir o mesmo comportamento.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Outra discrepância ainda não resolvida é que no Perl
     5.005_02 o padrão /^(a)?(?(1)a|b)+$/ corresponde à string
     &quot;a&quot;, enquanto que na PCRE isso não acontece. No entanto, tanto no Perl
     quanto na PCRE, /^(a)?a/ correspondido com &quot;a&quot; deixa $1 indefinido.
    </span>
    </li>
    <li class="listitem">
    <p class="para">
     PCRE fornece algumas extensões para os recursos de expressão
     regular Perl:
      <ol type="1">
       <li class="listitem">
        <span class="simpara">
         Embora as afirmações retroativas devam corresponder a strings de comprimento
         fixo, cada ramificação alternativa de uma afirmação retroativa
         pode corresponder a um comprimento diferente de string. O Perl 5.005 exige
         que todas tenham o mesmo comprimento.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a>
        estiver definida e <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>
        não estiver definida, o metacaractere $ corresponderá apenas ao final da
        string.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a>
        estiver definida, uma barra invertida seguida por uma letra sem significado especial
        será uma falha.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_UNGREEDY</a> estiver
        definida, a ganância dos quantificadores de repetição é invertida,
        ou seja, por padrão eles não serão gananciosos, mas se seguidos de um
        ponto de interrogação eles serão.
       </span>
      </li>
     </ol>
    </p>
   </li>
  </ol>
 </p>
</div>
<?php manual_footer($setup); ?>