Newsgroup: it.comp.www.php
Titolo: Grabber HTML con Regular Expression

Salve, ho un problema con le espressioni regolari, il mio obbiettivo è
di prelevare le informazioni da una pagina HTML; i problemi che ho
riscontrato sono i seguenti:
   1. l'output è esattamente quello che voglio ma non capisco perché
nn si ferma al primo "</p>" ovvero dopo "</strong>";
   2. vorrei eliminare da array[2] "</p><br> <p><br/>" sempre mediante
le espressioni regolari
   3. ho letto che risulta più veloce l'esecuzione se risparmio
backreference nel mio caso è perfettamente inutile array[0] (aggiungo
che l'espressione regolare deve iniziare con <p class=\"testo_primary
\" in quanto devo trovare quella stringa che di sicuro si ripeterà
un'unica volta all'interno della pagina HTML ne caso specifico $html).
Il 3punto non è importante ci terrei di più a risolvere i primi 2 ;-)
il file PHP è in basso ed è visionabile anche da qui: 
http://codepad.org/3CG0RGFD
<?php
$html="
<HTML>
<body>
bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0
bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0bla0
					<p class=\"testo_primary\" style=\"text-transform: uppercase;\">
						<strong>Titolo - Questo è il titolo</strong>
					</p><br>
							<p><br />
blablablablablablablablablablablablablablablablablablablabla
blablablablablablablablablablablablablablablablablablablabla</p>
bla2bla2bla2bla2bla2bla2
</body>
</HTML>
";
if (preg_match("/\<p class=\"testo_primary\".*\<strong\>(.*)\<\/strong
\>(.*)\<\/p\>/s", $html,$parts)) {
    echo "Il riconoscimento è avvenuto.";
} else {
    echo "Testo non riconosciuto.";
}
echo "<br>"; //
print_r($parts);
?>
l'output è il seguente:
Il riconoscimento è avvenuto.<br>Array
(
    [0] => <p class="testo_primary" style="text-transform:
uppercase;">
						<strong>Titolo - Questo è il titolo</strong>
					</p><br>
							<p><br />
blablablablablablablablablablablablablablablablablablablabla
blablablablablablablablablablablablablablablablablablablabla</p>
    [1] => Titolo - Questo è il titolo
    [2] =>
					</p><br>
							<p><br />
blablablablablablablablablablablablablablablablablablablabla
blablablablablablablablablablablablablablablablablablablabla
)
Un grazie anticipato!

 riscontrato sono i seguenti:
Alcuni suggerimenti se vuoi lavorare con le espressioni regolari:
1. Utilizza un delimiter meno comune (es. #), ti evita di dover fare
escaping all'infinito.
2. Utilizza un delimitatore del testo che non sia presente
nell'espressione regolare (es. ' piuttosto che "), per lo stesso motivo
del punto 1.
3. Non fare l'escaping di caratteri che non hanno bisogno di escaping
(es. < e >).
4. Studiati il significato di greedy nelle espressioni regolari.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

> Alcuni suggerimenti se vuoi lavorare con le espressioni regolari:
Ho seguito in parte i tuoi suggerimenti, questo è il codice
modificato:
/<p class=\"testo_primary\".*?<strong\>(.*?)<\/strong>.*?<br \/>(.*?)<
\/p>/s
 non ho ben capito cosa intendi per delimiter meno comune come #.
Puoi darmi se puoi qualche altro consiglio su come ottimizzare quel
codice regex.
Ad ogni modo grazie!

  non ho ben capito cosa intendi per delimiter meno comune come #.
Invece di utilizzare / come delimiter, prova con #, ed ovviamente
rimuovi gli escaping che non sono piu' necessari grazie a questa
modifica.


(.*?)</p>#s', $html,$parts)
Se c'è altro da aggiungere/ottimizzare fammi sapere, e grazie
ancora ;)