<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.assertions.php',
    1 => 'Afirmaciones',
    2 => 'Afirmaciones',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Sintaxis de expresiones regulares PCRE',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.back-references.php',
    1 => 'Referencias inversas',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.onlyonce.php',
    1 => 'Subpatrones de una sola vez',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Afirmaciones</h2>
  <p class="para">
   Una afirmación es una prueba sobre los caracteres que siguen o preceden al punto de coincidencia actual que no consume realmente ningún carácter. Las afirmaciones simples codificadas como \b,
   \B, \A, \Z, \z, ^ y $ se describen en <a href="regexp.reference.escape.php" class="link">secuencias de escape</a>. Las afirmaciones más complicadas se codifican como subpatrones. Hay dos
   tipos: aquellos que <em>miran hacia adelante</em> de la posición actual en la
   cadena de sujeto, y aquellos que <em>miran hacia atrás</em> de ella.
  </p>
  <p class="para">
   Un subpatrón de afirmación se coincide de la manera normal, excepto
   que no hace que la posición de coincidencia actual cambie. <em>Afirmaciones de anticipación</em> comienzan con (?= para afirmaciones positivas y (?! para afirmaciones negativas. Por ejemplo,

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

   coincide con una palabra seguida de un punto y coma, pero no incluye
   el punto y coma en la coincidencia, y

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

   coincide con cualquier ocurrencia de &quot;foo&quot; que no esté seguida por
   &quot;bar&quot;. Tenga en cuenta que el patrón aparentemente similar

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

   no encuentra una ocurrencia de &quot;bar&quot; que esté precedida por algo que no sea &quot;foo&quot;; encuentra cualquier ocurrencia de &quot;bar&quot;
   en absoluto, porque la afirmación (?!foo) es siempre <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>
   cuando los siguientes tres caracteres son &quot;bar&quot;. Se necesita una afirmación de retroceso para lograr este efecto.
  </p>
  <p class="simpara">
   <em>Afirmaciones de retroceso</em> comienzan con (?&lt;= para afirmaciones positivas y (?&lt;! para afirmaciones negativas. Por ejemplo,

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

   sí encuentra una ocurrencia de &quot;bar&quot; que no está precedida por
   &quot;foo&quot;. Una afirmación de retroceso puede coincidir con cadenas de longitud
   variable, hasta una longitud máxima definida por la implementación.
   Las alternativas de longitudes diferentes, como

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

   y las ramas de nivel superior que pueden coincidir con más de una longitud, como

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

   están permitidas.

   La implementación de afirmaciones de retroceso es, para cada alternativa, mover temporalmente la posición actual hacia atrás por el ancho fijo y luego intentar coincidir. Si no hay suficientes caracteres antes de la posición actual, la coincidencia se considera fallida. Los retrocesos en conjunto con subpatrones de una sola vez pueden ser particularmente útiles para coincidir al final de las cadenas; se da un ejemplo al final
   de la sección sobre subpatrones de una sola vez.
  </p>
  <p class="simpara">
   Antes de PHP 8.4.0, que incluye PCRE2 10.44, el contenido de una afirmación de
   retroceso estaba restringido de tal manera que todas las cadenas con las que
   coincidía debían tener una longitud fija. Si había varias alternativas, no todas
   tenían que tener la misma longitud fija, por lo tanto

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

   estaba permitido, pero

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

   causaba un error en el momento de la compilación. Las ramas que coincidían con
   cadenas de diferentes longitudes estaban permitidas solo al nivel superior de una
   afirmación de retroceso. Esto era una extensión en comparación con Perl 5.005, que
   requería que todas las ramas coincidieran con la misma longitud de cadena. Una
   afirmación como

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

   no estaba permitida, porque su única rama de nivel superior podía coincidir con dos
   longitudes diferentes, pero era aceptable si se reescribía para usar dos ramas de
   nivel superior:

   <code class="literal">(?&lt;=abc|abde)</code>
  </p>
  <p class="para">
   Varias afirmaciones (de cualquier tipo) pueden ocurrir en sucesión.
   Por ejemplo,

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

   coincide con &quot;foo&quot; precedido por tres dígitos que no son &quot;999&quot;.
   Observe que cada una de las afirmaciones se aplica independientemente
   en el mismo punto de la cadena de sujeto. Primero hay una verificación de que los tres caracteres anteriores son todos dígitos,
   luego hay una verificación de que los mismos tres caracteres no son &quot;999&quot;. Este patrón no coincide con &quot;foo&quot; precedido por seis
   caracteres, el primero de los cuales son dígitos y los últimos tres de los cuales no son &quot;999&quot;. Por ejemplo, no coincide
   con &quot;123abcfoo&quot;. Un patrón para hacer eso es

   <code class="literal">(?&lt;=\d{3}...)(?&lt;!999)foo</code>
  </p>
  <p class="para">
   Esta vez la primera afirmación mira los seis caracteres anteriores, verificando que los primeros tres son dígitos, y
   luego la segunda afirmación verifica que los tres caracteres anteriores no son &quot;999&quot;.
  </p>
  <p class="para">
   Las afirmaciones pueden anidarse en cualquier combinación. Por ejemplo,

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

   coincide con una ocurrencia de &quot;baz&quot; que es precedida por &quot;bar&quot;
   que a su vez no es precedida por &quot;foo&quot;, mientras que

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

   es otro patrón que coincide con &quot;foo&quot; precedido por tres
   dígitos y cualquier tres caracteres que no son &quot;999&quot;.
  </p>
  <p class="para">
   Los subpatrones de afirmación no son subpatrones de captura, y no pueden
   repetirse, porque no tiene sentido afirmar lo mismo varias veces. Si cualquier tipo de afirmación contiene subpatrones de captura dentro de ella, estos se cuentan para los fines de numerar los subpatrones de captura en todo
   el patrón. Sin embargo, la captura de subcadenas solo se lleva a cabo para afirmaciones positivas, porque no tiene sentido para afirmaciones negativas.
  </p>
  <p class="para">
   Las afirmaciones cuentan hacia el máximo de 200 subpatrones entre paréntesis.
  </p>
 </div><?php manual_footer($setup); ?>