Newsgroup: it.comp.www.php
Titolo: Parsing HTML con PHP

Ciao,
Come posso fare con PHP per trasformare una linea HTML nel modo che
indico sotto? In pratica vorrei che il contenuto della cella(in questo
caso 'Mario') venisse sostituito da degli asterischi...
Vorrei prendere un file HTML in input e in output avere lo stesso file
HTML con i nomi dei clienti mascherati da * .
es:
...
<td><font face="Arial" size="2">Mario</font></td>
...
in 
...
<td><font face="Arial" size="2">*****</font></td>
...
Vi ringrazio per l'attenzione, un caro saluto a tutti!

 ha scritto nel messaggio
news:f98f174e.03031...@posting.google.com...


 <td><font face="Arial" size="2">*****</font></td>
Espressioni regolari.
$riga = '<td><font face="Arial" size="2">Mario</font></td>';
$riga_mascherata = preg_replace("/(<td><font face=\"Arial\"
size=\"2\">)[^<]+(<\/font><\/td>)/", "$1****$2", $riga);
echo $riga_mascherata;
S*

Grazie mille ragazzi siete stati gentilissimi...
A proposito delle espressioni regolari, conoscete un tutorial che sia
ricco di esempi? il manuale di PHP è molto esauriente sulla sintassi,
ma mi piacerebbe avere una carellata di esempi per mettere in pratica
i concetti esposti nel manuale...
Ciao grazie ancora e buona serata

Ciao,
Ho provato il tuo script con l'espressione regolare da te indicata, ma
invece di mascherare la riga me la riporta tale e quale come è
indicata nella variabile $riga, riesci a darmi qualche dritta?
grazie mille.


 indicata nella variabile $riga, riesci a darmi qualche dritta?
Non penso proprio! 
Se l'hai copiata dalla mia mail stai attento agli a capi che inserisce il
mailer. Ovviamente i pezzi di html dentro l'espressione regolare devono
essere identici a quelli che hai nell'html che stai parsando, spazi e a capi
compresi.
S*

 ...
Infatti,la prossima volta prima di postare starò più attento, il problema 
era un carattere di newline inserito dal mio MUA.
grazie mille per i tuoi consigli, buona serata

 size=\"2\">)[^<]+(<\/font><\/td>)/", "$1****$2", $riga);
Ti posso chiedere(se hai tempo e voglia) di spiegarmi come funziona questa 
're' ?
Ho letto il manuale del PHP per la funzione 'preg_replace()' ma non ho 
visto riferimenti all'uso di $1 e $2 come li hai usati tu, è un costrutto 
delle 're' oppure fa parte della sintassi della funzione PHP?
Grazie mille per il tempo e la pazienza.
un caro saluto.

 delle 're' oppure fa parte della sintassi della funzione PHP?
"/ apre l'espressione di ricerca
(<td>...>) e (<\/font><\/td>): le parentesi ordinano di memorizzare il
contenuto in una variabile; le variabili sono $1...$9. Quindi $1 conterra'
il contenuto del primo blocco di parentesi e $2 il secondo
[^<]  dice di cercare qualsiasi carattere diverso da "<"
+  dice di cercare una sequenza di 1 o piu' caratteri come il precedente
(cioe' diversi da <)
Qui avremmo potuto usare .+ ovvero cerca una qualsiasi sequenza di
caratteri. Nel caso pero' $riga avesse contenuto piu' volte il pattern
cercato .+ si sarebbe espanso fino all'ultimo pattern facendo un pasticcio,
evitabile pero' con la formula .+? che limita al primo pattern trovato.
/" chiude l'espressione di ricerca
"$1***$2" e' l'espressione di sostituzione: dice di sostituire la stringa
cercata con questa stringa, in cui come detto $1 e $2 contengono cio' che e'
stato trovato fra le parentesi.
Queste sono le espressioni regolari del Perl; per conoscerle bene piu' che
il php e' bene studiare il Perl. Penso che su siti di tutorial dedicati al
perl dovresti trovare ampia documentazione ed esempi. Con le espressioni
regolari puoi fare un'enorme quantita' di cose, quindi conoscerle bene e'
fondamentale.
S*