PHP/Programmazione/Regexp: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Filnik (discussione | contributi)
Nessun oggetto della modifica
Filnik (discussione | contributi)
Nessun oggetto della modifica
Riga 71:
== Sostituire dei dati con degli altri ==
 
Poniamo per esempio di dover cambiare tutti ile <nowiki><br></nowiki>stringhe [[Image:x]] con <nowiki><br[[Immagine:x]] /></nowiki>per seguendoovviare cosìa lodei standardproblemi [[w:HTML|HTML]].tecnici del motore wikimedia.
 
<source lang=php>
<?php
$testo = "<br><br[[image:ciao.png]], ><br />[[Image:CIAO.jpeg]]";
$regex = "/<br\s[\[[Ii]mage:(.*?>)\]\]/";
$regex2 = "<br>[[Immagine:\\1]]";
$risultato = preg_replace($regex, $regex2, $testo);
print_r(print $risultato);
?>
</source>
 
Il risultato di questo script è:
<pre>
[[Immagine:ciao.png]], [[Immagine:CIAO.jpeg]]
</pre>
 
In questo modo abbiamo definito una prima regex per "prendere" il testo che ci serve una stringa per dire al motore PCRE come sostituire il testo preso. Dato che la seconda è una stringa e la backslash (\) è un carattere speciale in PHP, bisogna raddoppiarla per fare un backreference (riferimento all'indietro, ovvero andare a prendere la parentesi identificata dal numero).
 
'''Attenzione''':
# preg_replace resistuisce un valore tramite assegnamento (ovvero, dovete usare la sintassi $variabile = preg_replace();) al contrario di quanto faceva preg_match(_all)
# Questa regex non è la migliore in quanto il tutto potrebbe essere fatto semplicemente con qualcosa tipo "/\[\[[Ii]mage:/". La parte superflua è stata inserita ad esclusiva finalità didattica (per spiegare come usare le blackreference correttamente).
 
 
 
== Collegamenti esterni ==