<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.escape.php',
    1 => 'Sequenze di escape',
    2 => 'Sequenze di escape',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Sintassi delle regex PCRE',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.meta.php',
    1 => 'Meta-caratteri',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.unicode.php',
    1 => 'Unicode character properties',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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.escape" class="section">
  <h2 class="title">Sequenze di escape</h2>
  <p class="para">
   Il carattere backslash (\) ha diversi utilizzi. Primo uso: se
   viene anteposto a caratteri non alfanumerici, rimuove gli
   eventuali significati speciali che il carattere può avere. Questo utilizzo
   di backslash come carattere di escape può essere svolto sia all&#039;interno delle
   classi di caratteri, sia all&#039;esterno.
  </p>
  <p class="para">
   Ad esempio, un criterio che deve riconoscere il carattere &quot;*&quot;
   conterrà &quot;\*&quot;. Ciò si applica indipendentemente dal
   carattere seguente, sia esso interpretabile come meta-carattere
   o meno. Nel caso in cui un carattere non alfanumerico debba
   identificare se stesso è opportuno farlo precedere dal &quot;\&quot;.
   In particolare per identificare un backslash occorre scrivere &quot;\\&quot;.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Le <a href="language.types.string.php#language.types.string.syntax" class="link">stringhe</a> PHP
    a singolo o doppio apice hanno un significato
    speciale del backslash. Quindi, se \ deve essere cercato con un&#039;espressione
    regolare \\, nel codice PHP deve essere usato &quot;\\\\&quot; oppure &#039;\\\\&#039;.
   </p>
  </p></blockquote>
  <p class="para">
   Se nel criterio di riconoscimento si specifica l&#039;opzione
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>,
   lo spazio bianco (diversamente da quando si trova all&#039;interno di una classe
   di caratteri), e i caratteri posti tra &quot;#&quot; e un &quot;a capo&quot; all&#039;esterno di una
   classe di caratteri sono ignorati. Un backslash può essere usato come escape per inserire uno
   spazio bianco od il carattere &quot;#&quot; come parte del criterio di riconoscimento.
  </p>
  <p class="para">
   Un secondo utilizzo del backslash consiste nel codificare in
   modo visibile dei caratteri non visibili. Non ci sono restrizioni
   nella presenza di caratteri non-stampabili, a parte lo zero
   binario terminante la stringa dell&#039;espressione regolare.
   Di seguito saranno elencate le sequenze di caratteri che
   è preferibile utilizzare per la loro semplicità al posto
   delle corrispondenti codifiche binarie.
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\a</em></dt>
     <dd>
      <span class="simpara">allarme, il carattere BEL  (hex 07)</span>
     </dd>
    
    
     <dt><em>\cx</em></dt>
     <dd>
      <span class="simpara">&quot;control-x&quot;, dove x è un qualsiasi carattere</span>
     </dd>
    
    
     <dt><em>\e</em></dt>
     <dd>
      <span class="simpara">escape (hex 1B)</span>
     </dd>
    
    
     <dt><em>\f</em></dt>
     <dd>
      <span class="simpara">salto pagina (hex 0C)</span>
     </dd>
    
    
     <dt><em>\n</em></dt>
     <dd>
     <span class="simpara">&quot;a capo&quot; (newline) (hex 0A)</span>
     </dd>
    
    
     <dt><em>\p{xx}</em></dt>
     <dd>
      <span class="simpara">
       un carattere con la proprietà xx, vedere 
       <a href="regexp.reference.unicode.php" class="link">proprietà unicode</a> 
       per maggiori informazioni
      </span>
     </dd>
    
    
     <dt><em>\P{xx}</em></dt>
     <dd>
      <span class="simpara">
       un carattere senza la proprietà xx, vedere 
       <a href="regexp.reference.unicode.php" class="link">proprietà unicode</a> 
       per maggiori informazioni
      </span>
     </dd>
    
    
     <dt><em>\r</em></dt>
     <dd>
      <span class="simpara">carriage return (hex 0D)</span>
     </dd>
    
    
     <dt><em>\t</em></dt>
     <dd>
      <span class="simpara">tabulazione (hex 09)</span>
     </dd>
    
    
     <dt><em>\xhh</em></dt>
     <dd>
      <span class="simpara">
       carattere il cui codice esadecimale è hh
      </span>
     </dd>
    
    
     <dt><em>\ddd</em></dt>
     <dd>
      <span class="simpara">carattere il cui codice ottale è ddd, oppure riferimento all&#039;indietro</span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Il preciso effetto di &quot;<code class="literal">\cx</code>&quot; è il seguente:
   se &quot;<code class="literal">x</code>&quot; è una lettera minuscola, viene convertita
   in lettera maiuscola. In pratica viene invertito il sesto bit (hex 40)
   del carattere. Quindi &quot;<code class="literal">\cz</code>&quot; diventa hex 1A, ma
   &quot;<code class="literal">\c{</code>&quot; diventa hex 3B, mentre &quot;<code class="literal">\c;</code>&quot;
   diventa hex 7B.
  </p>
  <p class="para">
   Dopo la sequenza &quot;<code class="literal">\x</code>&quot;, saranno letti due
   numeri esadecimali (per le lettere non si distingue tra maiuscolo e minuscolo).
   In <em>modalità UTF-8</em>, &quot;<code class="literal">\x{...}</code>&quot; è
   permesso, quando il contenuto delle parentesi graffe è una stringa di
   cifre esadecimali. È interpretato come un carattere UTF-8 il cui numero di codice è
   la cifra esadecimale specificata. La sequenza originale esadecimale di escape,
   <code class="literal">\xhh</code>, cerca un carattere UTF-8 a due byte se il valore
   è maggiore di 127.
  </p>
  <p class="para">
   Dopo la sequenza &quot;<code class="literal">\0</code>&quot; saranno lette due cifre in ottale.
   In entrambi i casi se vi sono meno di due cifre, saranno usati i
   numeri presenti. Pertanto la sequenza &quot;<code class="literal">\0\x\07</code>&quot; 
   indica 2 zeri binari seguiti dal carattere BEL. Occorre accertarsi
   di passare le cifre necessarie dopo lo zero iniziale se il carattere
   che segue può essere scambiato per una cifra in ottale.
  </p>
  <p class="para">
   Più complicata è la gestione del backslash seguito da una cifra
   diversa da 0. Al di fuori di una classe di caratteri, PCRE
   tratta le cifre che trova come numeri decimali. Se il numero
   è inferiore a 10, oppure vi sono state almeno altrettante
   parentesi sinistre, la sequenza viene considerata come un
   <em>riferimento</em> <em>all&#039;indietro</em>.
   Più avanti, nella parte dei criteri parziali, sarà descritto come
   funzionano questi riferimenti.
  </p>
  <p class="para">
   All&#039;interno di una classe di caratteri, oppure nel caso in cui il numero decimale
   è maggiore di 9 e non ci sono stati altrettanti criteri parziali,
   PCRE rilegge le prime 3 cifre seguenti il backslash in ottale
   e genera il carattere dagli 8 bit meno significativi del valore
   ottenuto. Ogni altra cifra seguente indica se stessa.
   Ad esempio:
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\040</em></dt>
     <dd><span class="simpara">è un&#039;altro modo per indicare uno spazio</span></dd>
    
    
     <dt><em>\40</em></dt>
     <dd>
      <span class="simpara">
       ha il medesimo significato dell&#039;esempio precedente che
       non vi sono 40 sotto-criteri
      </span>
     </dd>
    
    
     <dt><em>\7</em></dt>
     <dd><span class="simpara">è sempre un riferimento all&#039;indietro</span></dd>
    
    
     <dt><em>\11</em></dt>
     <dd>
      <span class="simpara">
       può essere un riferimento all&#039;indietro o un&#039;altro modo
       per indicare il carattere di tabulazione
      </span>
     </dd>
    
    
     <dt><em>\011</em></dt>
     <dd><span class="simpara">è ancora il carattere di tabulazione</span></dd>
    
    
     <dt><em>\0113</em></dt>
     <dd><span class="simpara">il carattere di tabulazione seguito da &quot;3&quot;</span></dd>
    
    
     <dt><em>\113</em></dt>
     <dd>
      <span class="simpara">
       è il carattere con il codice ottale 113 (poiché non
       ci possono essere più di 99 riferimenti all&#039;indietro)
      </span>
     </dd>
    
    
     <dt><em>\377</em></dt>
     <dd><span class="simpara">è un byte con tutti i bit a 1</span></dd>
    
    
     <dt><em>\81</em></dt>
     <dd>
      <span class="simpara">
       può essere un riferimento all&#039;indietro o
       uno zero binario seguito da &quot;8&quot; e da &quot;1&quot;
      </span>
     </dd>
    
   </dl>
  </p>
  <p class="para">
   Occorre rilevare che valori ottali maggiori di 100 non devono
   essere preceduti dallo zero, questo perché la libreria considera
   solo tre cifre.
  </p>
  <p class="para">
   Tutte le sequenze che definiscono il valore di un singolo byte possono essere
   utilizzate sia all&#039;interno sia all&#039;esterno delle classe di caratteri. Inoltre,
   all&#039;interno delle classi di caratteri, la sequenza &quot;<code class="literal">\b</code>&quot;
   viene interpretata come carattere di backspace (hex 08), mentre all&#039;esterno ha
   un altro significato (come descritto più avanti).
  </p>
  <p class="para">
   Il terzo utilizzo possibile per il backslash consiste nello
   specificare il tipo di carattere:
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\d</em></dt>
     <dd><span class="simpara">qualsiasi cifra decimale</span></dd>
    
    
     <dt><em>\D</em></dt>
     <dd><span class="simpara">qualsiasi carattere che non sia una cifra decimale</span></dd>
    
    
     <dt><em>\h</em></dt>
     <dd><span class="simpara">qualsiasi carattere identificato come spazio bianco orizzontale (da PHP 5.2.4)</span></dd>
    
    
     <dt><em>\H</em></dt>
     <dd><span class="simpara">qualsiasi carattere che non sia identificato come spazio bianco orizzontale (da PHP 5.2.4)</span></dd>
    
    
     <dt><em>\s</em></dt>
     <dd><span class="simpara">qualsiasi carattere identificato come spazio bianco</span></dd>
    
    
     <dt><em>\S</em></dt>
     <dd><span class="simpara">qualsiasi carattere che non sia identificato come spazio bianco</span></dd>
    
    
     <dt><em>\v</em></dt>
     <dd><span class="simpara">qualsiasi carattere identificato come spazio bianco verticale (da PHP 5.2.4)</span></dd>
    
    
     <dt><em>\V</em></dt>
     <dd><span class="simpara">qualsiasi carattere che non sia identificato come spazio bianco verticale (da PHP 5.2.4)</span></dd>
    
    
     <dt><em>\w</em></dt>
     <dd><span class="simpara">qualsiasi carattere che sia una &quot;parola&quot; (word)</span></dd>
    
    
     <dt><em>\W</em></dt>
     <dd><span class="simpara">qualsiasi carattere che non sia una &quot;parola&quot; (word)</span></dd>
    
   </dl>
  </p>
  <p class="para">
   Ciascuna coppia di sequenze di escape suddivide il set
   completo dei caratteri in due insiemi disgiunti. Un dato carattere
   deve essere identificato da un solo insieme di ciascuna coppia.
  </p>
  <p class="para">
   I caratteri definiti &quot;parole&quot; sono quelle lettere o cifre o il carattere
   underscore (_), cioè qualsiasi carattere che possa essere parte di una
   &quot;<code class="literal">parola</code>&quot; in Perl. In PCRE le definizioni di lettere e cifre vengono
   gestite tramite le tabelle dei caratteri, che possono variare in base a specifici parametri
   di localizzazione. Ad esempio, nella localizzazione fr (relativa alla Francia), qualche
   codice carattere maggiore di 128 è utilizzato per le lettere
   accentate, e queste sono identificate tramite la sequenza <code class="literal">\w</code>.
  </p>
  <p class="para">
   Queste sequenze di tipi di caratteri possono apparire sia all&#039;interno sia all&#039;esterno delle
   classi di caratteri. Ciascuna di esse identifica un carattere del tipo appropriato.
   Se durante la fase di identificazione di un testo, si giunge al termine della stringa in cui
   si esegue il riconoscimento e si hanno ancora di queste sequenze da incrociare, l&#039;operazione
   di identificazione fallirà perché, ovviamente, non vi sono più caratteri in cui riconoscere le suddette sequenze.
  </p>
  <p class="para">
   Il quarto utilizzo per il backslash riguarda la costruzione
   di particolari asserzioni. L&#039;asserzione è una condizione che deve essere soddisfatta
   ad un certo punto del riconoscimento, senza &quot;consumare&quot; caratteri dalla stringa oggetto del
   riconoscimento. Più avanti verranno descritte asserzioni più complicate, costruite tramite
   l&#039;uso di sotto-criteri di riconoscimento, per ora saranno illustrate delle semplici
   asserzioni costruite con il backslash:
  </p>
  <p class="para">
   <dl>
    
     <dt><em>\b</em></dt>
     <dd><span class="simpara">limite di una parola</span></dd>
    
    
     <dt><em>\B</em></dt>
     <dd><span class="simpara">non limite di una parola</span></dd>
    
    
     <dt><em>\A</em></dt>
     <dd><span class="simpara">inizio dell&#039;oggetto di ricerca (a prescindere dalla modalità multi-linea)</span></dd>
    
    
     <dt><em>\Z</em></dt>
     <dd>
      <span class="simpara">
       fine dell&#039;oggetto di ricerca oppure newline alla fine  (a prescindere dalla
       modalità multi-linea)
      </span>
     </dd>
    
    
     <dt><em>\z</em></dt>
     <dd><span class="simpara">fine dell&#039;oggetto di ricerca (a prescindere dalla modalità multi-linea)</span></dd>
    
    
     <dt><em>\G</em></dt>
     <dd><span class="simpara">prima posizione trovata nell&#039;oggetto</span></dd>
    
   </dl>
  </p>
  <p class="para">
   Queste asserzioni non possono apparire all&#039;interno di una
   classe di caratteri (attenzione che la sequenza &quot;<code class="literal">\b</code>&quot;
   all&#039;interno di una classe di caratteri indica il carattere backspace).
  </p>
  <p class="para">
   Viene definito limite di una parola la posizione nella stringa oggetto della ricerca, nella quale
   il carattere corrente ed il carattere precedente non soddisfano la
   sequenza <code class="literal">\w</code> o la sequenza <code class="literal">\W</code> (ad esempio uno soddisfa la sequenza
   <code class="literal">\w</code> e l&#039;altro carattere soddisfa la sequenza
   <code class="literal">\W</code>), oppure quella posizione, all&#039;inizio o alla fine della stringa, nella quale rispettivamente
   il primo o l&#039;ultimo carattere soddisfa la sequenza <code class="literal">\w</code>.
  </p>
  <p class="para">
   Le asserzioni <code class="literal">\A</code>, <code class="literal">\Z</code> e <code class="literal">\z</code>
   differiscono dai tradizionali caratteri &quot;^&quot; e &quot;$&quot; (descritti
   di seguito) per il fatto di identificare sempre l&#039;inizio  o la
   fine della stringa oggetto di ricerca a prescindere da quale
   opzione sia stata attivata. Infatti queste asserzioni non sono
   alterate da <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a>
   oppure da  <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a>.
   La differenza tra <code class="literal">\Z</code> e <code class="literal">\z</code>
   consiste nel fatto che <code class="literal">\Z</code> identifica  sia il carattere
   precedente il newline posto al termine della stringa sia la fine della
   stringa, mentre <code class="literal">\z</code> identifica solo la fine.
  </p>
  <p class="para">
   The <code class="literal">\G</code> assertion is true only when the current
   matching position is at the start point of the match, as specified by
   the <code class="parameter">offset</code> argument of
   <span class="function"><a href="function.preg-match.php" class="function">preg_match()</a></span>. It differs from <code class="literal">\A</code>
   when the value of <code class="parameter">offset</code> is non-zero.
  </p>
  
  <p class="para">
   <code class="literal">\Q</code> and <code class="literal">\E</code> can be used to ignore
   regexp metacharacters in the pattern. For example:
   <code class="literal">\w+\Q.$.\E$</code> will match one or more word characters,
   followed by literals <code class="literal">.$.</code> and anchored at the end of
   the string.
  </p>
  
  <p class="para">
   <code class="literal">\K</code> can be used to reset the match start since
   PHP 5.2.4. For example, the pattern <code class="literal">foo\Kbar</code> matches
   &quot;foobar&quot;, but reports that it has matched &quot;bar&quot;. The use of
   <code class="literal">\K</code> does not interfere with the setting of captured
   substrings. For example, when the pattern <code class="literal">(foo)\Kbar</code>
   matches &quot;foobar&quot;, the first substring is still set to &quot;foo&quot;.
  </p>
  
 </div><?php manual_footer($setup); ?>