<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.pcre.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'function.preg-replace.php',
    1 => 'preg_replace',
    2 => 'Esegue una ricerca ed una sostituzione con le espressioni regolari',
  ),
  'up' => 
  array (
    0 => 'ref.pcre.php',
    1 => 'PCRE Funzioni',
  ),
  'prev' => 
  array (
    0 => 'function.preg-quote.php',
    1 => 'preg_quote',
  ),
  'next' => 
  array (
    0 => 'function.preg-replace-callback.php',
    1 => 'preg_replace_callback',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'reference/pcre/functions/preg-replace.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.preg-replace" class="refentry">
   <div class="refnamediv">
    <h1 class="refname">preg_replace</h1>
    <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">preg_replace</span> &mdash; <span class="dc-title">Esegue una ricerca ed una sostituzione con le espressioni regolari</span></p>

   </div>
   <div class="refsect1 unknown-1246" id="refsect1-function.preg-replace-unknown-1246">
    <h3 class="title">Descrizione</h3>
     <div class="methodsynopsis dc-description">
      <span class="methodname"><strong>preg_replace</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">mixed </span> <code class="parameter">$espressione_regolare</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">mixed </span> <code class="parameter">$sostituto</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">mixed </span> <code class="parameter">$testo</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int </span> <code class="parameter">$limite</code><span class="initializer"> = ?</span></span><br>): <span class="type">mixed </span></div>

    <p class="para rdfs-comment">
     La funzione ricerca in <code class="parameter">testo</code> i criteri
     impostati in <code class="parameter">espressione_regolare</code>. Se
     riconosce dei testi, li sostituisce con <code class="parameter">sostituto</code>.
     Se si specifica <code class="parameter">limite</code>, verranno sostituiti
     solamente <code class="parameter">limite</code> testi riconosciuti;
     se viene omesso, oppure impostato a -1, verranno sostituiti tutti
     i testi riconosciuti.
    </p>
    <p class="para">
     Il parametro <code class="parameter">sostituto</code> può contenere riferimenti
     nella forma di <code class="literal">\\<span class="replaceable">n</span></code>, oppure,
     a partire dalla versione 4.0.4 di PHP, <code class="literal"><span class="replaceable">$n</span>
     </code>, con la preferenza per la seconda sintassi. Questo tipo di
     riferimento verrà sostituito dal testo che soddisfa l&#039;<span class="replaceable">n
     </span>-esimo criterio presente in <code class="parameter">espressione_regolare
     </code>. Sono ammessi numeri compresi tra 0 e 99 inclusi. Il valore 0
     (<code class="literal">\\0</code> oppure <code class="literal">$0</code>) si riferisce al testo
     riconosciuto tramite tutta l&#039;espressione regolare passata. Nel conteggio
     dei criteri di riconoscimento presenti, sono contate le parentesi
     aperte da sinistra verso destra partendo da 1.
     </p>
      <p class="para">
       Quando si lavora con un criterio di sostituzione in cui un riferimento all&#039;indietro
       è immediatamente seguito da un&#039;altro numero (ad esempio un numero che segue immediatamente
       il criterio riconosciuto), non si possono utilizzare le solite notazioni,  <code class="literal">\\1</code>,
       per i riferimenti all&#039;indietro. Ad esempio, il testo <code class="literal">\\11</code>
       confonderebbe <span class="function"><strong>preg_replace()</strong></span> poiché non saprebbe se si desidera il riferimento
       all&#039;indietro <code class="literal">\\1</code> seguito dal numero <code class="literal">1</code>, oppure
       se è desiderato il riferimento <code class="literal">\\11</code> seguito da niente. In questi
       casi la soluzione consiste nell&#039;uso di <code class="literal">\${1}1</code>. In questo modo si
       crea un riferimento all&#039;indietro <code class="literal">$1</code> isolato dal numero <code class="literal">1</code>.
      </p>
     <p class="para">
     <div class="example" id="example-1">
      <p><strong>Example #1 Uso dei riferimenti all&#039;indietro seguiti da numeri</strong></p>
       <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">"April 15, 2003"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$pattern </span><span style="color: #007700">= </span><span style="color: #DD0000">"/(\w+) (\d+), (\d+)/i"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$replacement </span><span style="color: #007700">= </span><span style="color: #DD0000">"\${1}1,\$3"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$pattern</span><span style="color: #007700">, </span><span style="color: #0000BB">$replacement</span><span style="color: #007700">, </span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
       This example will output :
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
April1,2003
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Se verranno riconosciuti dei testi, la funzione restituisce la nuova
     versione di <code class="parameter">testo</code>, altrimenti il parametro
     sarà restituito inalterato.
    </p>
    <p class="para">
     Ogni parametro passato alla funzione <span class="function"><strong>preg_replace()</strong></span>,
     (eccetto <code class="parameter">limite</code>) può essere una matrice ad una dimensione.
     Quando si utilizzano matrici con <code class="parameter">espressione_regolare</code>
     e <code class="parameter">sostituto</code>, le chiavi sono processate
     nell&#039;ordine con cui appaiono nella matrice. Questo
     <em>non è necessariamente</em> l&#039;ordine
     numerico dell&#039;indice. Se si utilizzano degli indici per
     identificare quale <code class="parameter">espressione_regolare</code> debba
     essere sostituita da <code class="parameter">sostituto</code>, occorre eseguire
     la funzione <span class="function"><a href="function.ksort.php" class="function">ksort()</a></span> su ciascuna matrice
     prima di eseguire <span class="function"><strong>preg_replace()</strong></span>.
    </p>
    <p class="para">
    <div class="example" id="example-2">
     <p><strong>Example #2 Uso di matrici indicizzate con <span class="function"><strong>preg_replace()</strong></span></strong></p>
    <div class="example-contents">

<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #DD0000">"The quick brown fox jumped over the lazy dog."</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$patterns</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] = </span><span style="color: #DD0000">"/quick/"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$patterns</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">"/brown/"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$patterns</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">] = </span><span style="color: #DD0000">"/fox/"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$replacements</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">] = </span><span style="color: #DD0000">"bear"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$replacements</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">] = </span><span style="color: #DD0000">"black"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$replacements</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">] = </span><span style="color: #DD0000">"slow"</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$patterns</span><span style="color: #007700">, </span><span style="color: #0000BB">$replacements</span><span style="color: #007700">, </span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
       Output:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
The bear black slow jumped over the lazy dog.
</pre></div>
      </div>
      <div class="example-contents"><p>
       Utilizzando ksort su entrambe le matrici
       otteniamo cio che vogliamo.
      </p></div>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />ksort</span><span style="color: #007700">(</span><span style="color: #0000BB">$patterns</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">ksort</span><span style="color: #007700">(</span><span style="color: #0000BB">$replacements</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$patterns</span><span style="color: #007700">, </span><span style="color: #0000BB">$replacements</span><span style="color: #007700">, </span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

      <div class="example-contents"><p>
       Output :
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
The slow black bear jumped over the lazy dog.
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     Se il campo <code class="parameter">testo</code> è una matrice, la ricerca
     e la sostituzione sarà eseguita su ogni elemento della matrice,
     e conseguentemente la funzione restituirà una matrice.
    </p>
    <p class="para">
     Se <code class="parameter">espressione_regolare</code> ed <code class="parameter">sostituto</code>
     sono entrambi delle matrici, la funzione <span class="function"><strong>preg_replace()</strong></span>
     utilizza gli elementi di ciascuna matrice per la ricerca e la sostituzione
     delle stringhe in <code class="parameter">testo</code>. Nel caso in cui la
     matrice passata in <code class="parameter">sostituto</code> abbia
     meno elementi che <code class="parameter">espressione_regolare</code>,
     la funzione utilizzerà una stringa vuota per compensare gli
     elementi mancanti nella fase di sostituzione. Se, invece,
     <code class="parameter">espressione_regolare</code> è una matrice,
     mentre il campo <code class="parameter">sostituto</code> è una stringa,
     quest&#039;ultima sarà usata come valore da sostituire ad ogni testo
     riconosciuto. Un discorso contrario non ha senso.
    </p>
    <p class="para">
     Il modificatore <code class="literal">/e</code>, permette alla funzione
     di considerare il testo posto in <code class="parameter">sostituto</code>
     come codice PHP dopo aver valorizzato gli opportuni riferimenti.
     Suggerimento: accertarsi che <code class="parameter">sostituto</code>
     sia del codice PHP valido, altrimenti si ottiene un errore di
     parsing alla linea della funzione <span class="function"><strong>preg_replace()</strong></span>.
    </p>
    <p class="para">
     <div class="example" id="example-3">
      <p><strong>Example #3 Esempi di sostituzione di valori</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$patterns </span><span style="color: #007700">= array (</span><span style="color: #DD0000">"/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/"</span><span style="color: #007700">,<br />                   </span><span style="color: #DD0000">"/^\s*{(\w+)}\s*=/"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$replace </span><span style="color: #007700">= array (</span><span style="color: #DD0000">"\\3/\\4/\\1\\2"</span><span style="color: #007700">, </span><span style="color: #DD0000">"$\\1 ="</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$patterns</span><span style="color: #007700">, </span><span style="color: #0000BB">$replace</span><span style="color: #007700">, </span><span style="color: #DD0000">"{startDate} = 1999-5-27"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
       Questo esempio visualizzerà:
      </p></div>
      <div class="example-contents screen">
<div class="cdata"><pre>
$startDate = 5/27/1999
</pre></div>
      </div>
     </div>
    </p>
    <p class="para">
     <div class="example" id="example-4">
      <p><strong>Example #4 Utilizzo del modificatore /e </strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />preg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">"/(&lt;\/?)(\w+)([^&gt;]*&gt;)/e"</span><span style="color: #007700">,<br />              </span><span style="color: #DD0000">"'\\1'.strtoupper('\\2').'\\3'"</span><span style="color: #007700">,<br />              </span><span style="color: #0000BB">$html_body</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

      <div class="example-contents"><p>
       Nell&#039;esempio precedente tutti i tag HTML presenti nel testo di
       input saranno convertiti in maiuscolo.
      </p></div>
     </div>
    </p>
    <p class="para">
     <div class="example" id="example-5">
      <p><strong>Example #5 Esempio di conversione di codice HTML in testo</strong></p>
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// $document contiene un documento HTML.<br />// In questo esempio la funzione rimuove i tag HTML,<br />// le sezioni javascript e gli spazi bianchi.<br />// Inoltre si convertirà le entità HTML nella loro<br />// rappresentazione testuale.<br /></span><span style="color: #0000BB">$search </span><span style="color: #007700">= array (</span><span style="color: #DD0000">"'&lt;script[^&gt;]*?&gt;.*?&lt;/script&gt;'si"</span><span style="color: #007700">,  </span><span style="color: #FF8000">// Rimozione del javascript<br />                 </span><span style="color: #DD0000">"'&lt;[\/\!]*?[^&lt;&gt;]*?&gt;'si"</span><span style="color: #007700">,           </span><span style="color: #FF8000">// Rimozione dei tag HTML<br />                 </span><span style="color: #DD0000">"'([\r\n])[\s]+'"</span><span style="color: #007700">,                 </span><span style="color: #FF8000">// Rimozione degli spazi bianchi<br />                 </span><span style="color: #DD0000">"'&amp;(quot|#34);'i"</span><span style="color: #007700">,                 </span><span style="color: #FF8000">// Sostituzione delle entità HTML<br />                 </span><span style="color: #DD0000">"'&amp;(amp|#38);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(lt|#60);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(gt|#62);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(nbsp|#160);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(iexcl|#161);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(cent|#162);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(pound|#163);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;(copy|#169);'i"</span><span style="color: #007700">,<br />                 </span><span style="color: #DD0000">"'&amp;#(\d+);'e"</span><span style="color: #007700">);                    </span><span style="color: #FF8000">// Valuta come codice PHP<br /><br /></span><span style="color: #0000BB">$replace </span><span style="color: #007700">= array (</span><span style="color: #DD0000">""</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">""</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">"\\1"</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">"\""</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">"&amp;"</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">"&lt;"</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">"&gt;"</span><span style="color: #007700">,<br />                  </span><span style="color: #DD0000">" "</span><span style="color: #007700">,<br />                  </span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">161</span><span style="color: #007700">),<br />                  </span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">162</span><span style="color: #007700">),<br />                  </span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">163</span><span style="color: #007700">),<br />                  </span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">169</span><span style="color: #007700">),<br />                  </span><span style="color: #DD0000">"chr(\\1)"</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$text </span><span style="color: #007700">= </span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$search</span><span style="color: #007700">, </span><span style="color: #0000BB">$replace</span><span style="color: #007700">, </span><span style="color: #0000BB">$document</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </div>
    </p>
    <blockquote class="note"><p><strong class="note">Nota</strong>: 
     <p class="para">
      Il parametro <code class="parameter">limite</code> è stato aggiunto
      successivamente alla versione 4.0.1pl2 di PHP.
     </p>
    </p></blockquote>
    <p class="para">
     Vedere anche <span class="function"><a href="function.preg-match.php" class="function">preg_match()</a></span>,
     <span class="function"><a href="function.preg-match-all.php" class="function">preg_match_all()</a></span> e
     <span class="function"><a href="function.preg-split.php" class="function">preg_split()</a></span>.
    </p>
   </div>

  </div><?php manual_footer($setup); ?>