<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'reference.pcre.pattern.differences.php',
    1 => 'Differenze rispetto a Perl',
    2 => 'Differenze rispetto a Perl',
  ),
  'up' => 
  array (
    0 => 'pcre.pattern.php',
    1 => 'Pattern PCRE',
  ),
  'prev' => 
  array (
    0 => 'reference.pcre.pattern.modifiers.php',
    1 => 'Possibili modificatori nei pattern regex',
  ),
  'next' => 
  array (
    0 => 'ref.pcre.php',
    1 => 'PCRE Funzioni',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Differenze rispetto a Perl</h1>

 
 <p class="para">
  In questo capitolo saranno descritte le differenze rispetto a Perl 5.005.
  <ol type="1">
   <li class="listitem">
    <span class="simpara">
     Per default, lo  spazio  bianco  indica  tutti  i  caratteri riconoscibili
     dalla  funzione  isspace()  della libreria C, ciò non pregiudica la
     possibilità di compilare PCRE  con  un set di caratteri alternativi.
     Normalmente isspace() riconosce gli spazi, il salto pagina, il carattere &#039;a capo&#039; (newline),
     il carattere carriage return, la tabulazione orizzontale e verticale. Perl 5 non
     riconosce nel set dei caratteri indicati dallo &quot;spazio bianco&quot; la tabulazione verticale.
     Infatti il carattere di escape \v è stato presente per diverso tempo nella
     documentazione di Perl, ma  di fatto non viene riconosciuto. Tuttavia lo
     stesso carattere viene trattato come spazio bianco fino alla versione 5.002 di Perl.
     Nelle versioni 5.004 e 5.005 non viene riconosciuto il carattere \s.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     PCRE non supporta occorrenze ripetute in espressioni che &quot;guardano avanti&quot;.
     Perl lo permette, ma non nel modo a cui si possa pensare. Ad esempio,
     (?!a){3}, non indica che i tre caratteri successivi non debbano essere
     delle &quot;a&quot;, ma indica per tre volte che il carattere successivo non
     debba essere una &quot;a&quot;.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Il riconoscimento di criteri parziali che possono verificarsi
     all&#039;interno di espressioni che &quot;guardano avanti&quot; negative
     sono contati, ma i loro riferimenti non sono inseriti nel
     vettore degli offset. Perl valorizza le sue variabili da
     qualsiasi criterio che sia riconosciuto prima che l&#039;espressione
     regolare fallisca nel riconoscere qualcosa (riuscendo in tal modo), ma questo solo se
     l&#039;espressione che &quot;guarda avanti&quot; contiene almeno un ramo alternativo.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Sebbene il carattere di 0 binario sia supportato nella stringa in cui si
     deve svolgere la ricerca, non è ammesso nel testo dell&#039;espressione regolare,
     questo perché il testo viene passato come stringa C conclusa dal carattere zero.
     Si può comunque utilizzare la sequenza &quot;\\x00&quot; per richiedere il riconoscimento dello zero binario.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Non sono supportate le seguenti sequenze di escape di Perl:
     \l,  \u,  \L,  \U. Infatti queste sono implementate
     nelle funzioni di gestione delle stringhe di Perl e non nel
     suo motore di riconoscimento delle espressioni regolari.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
    L&#039;asserzione di Perl \G non è supportata poiché non è
    rilevante per il riconoscimento di espressioni singole.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Ovviamente PCRE non supporta il costrutto (?{code}) e (??{code}).
     Comunque, le espressioni ricorsive sono supportate.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Al momento in cui si scrive, in Perl  5.005_02 vi sono alcune particolarità
     riguardanti la parametrizzazione delle stringhe catturate quando
     parte del criterio di riconoscimento viene ripetuto. Ad esempio, il riconoscimento
     di &quot;aba&quot; con il criterio /^(a(b)?)+$/, valorizza $2 con la lettera &quot;b&quot;,i
     usando il testo &quot;aabbaa&quot; con il criterio /^(aa(bb)?)+$/ non si ha la
     valorizzazione di $2. Tuttavia se il criterio di riconoscimento viene
     variato in /^(aa(b(b))?)+$/, sia $2 che $3 vengono valorizzate.
     Nelle versione 5.004 di Perl, la variabile $2 viene valorizzata in
     entrambi i casi, come pure è <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> in PCRE. Se in futuro Perl cambierà
     nella gestione anche PCRE potrà cambiare di conseguenza.
    </span>
    </li>
    <li class="listitem">
    <span class="simpara">
     Un&#039;altra discrepanza non ancora risolta riguarda il criterio di
     riconoscimento /^(a)?(?(1)a|b)+$/, che in Perl 5.005_02 riconosce
     la stringa &quot;a&quot;, mentre non accade in PCRE. Tuttavia in entrambi
     ( Perl e PCRE ) il riconoscimento di &quot;a&quot; con il criterio /^(a)?a/ non valorizza $1.
    </span>
    </li>
    <li class="listitem">
    <p class="para">
     PCRE prevede alcune estensioni per la gestione delle
     espressioni regolari di Perl:
      <ol type="1">
       <li class="listitem">
        <span class="simpara">
         Sebbene le asserzioni che &quot;guardano indietro&quot; richiedano testi di
         lunghezza fissa, è ammesso che ciascun ramo alternativo del criterio
         di ricerca possa intercettare stringhe di lunghezza differente.
         Al contrario Perl 5.005 richiede che tutte le stringhe abbiamo la stessa lunghezza.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se viene settato <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a>
        e non viene attivato <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>,
        il meta-carattere $ indica soltanto la fine della
        stringa.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se si attiva <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTRA</a>,
        un carattere backslash (\) seguito da una lettera che
        non abbia un significato speciale genera un errore.
       </span>
      </li>
      <li class="listitem">
       <span class="simpara">
        Se si attiva <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_UNGREEDY</a>,
        si inverte la &quot;voracità&quot; delle occorrenze, in modo da non
        essere voraci per default, ma lo tornano ad essere se
        seguiti da &quot;?&quot;.
       </span>
      </li>
     </ol>
    </p>
   </li>
  </ol>
 </p>
</div>
<?php manual_footer($setup); ?>