2009-10-19 17 views
14

Hola me gustaría utilizar preg_match en PHP para analizar el "texto deseado" fuera de lo siguiente de un documento htmlPreg texto partido en php entre etiquetas HTML

<p class="review"> Desired text </p> 

Normalmente me gustaría utilizar simple_html_dom para tales cosas pero en esta ocasión no se puede usar (el elemento anterior no aparece en todas las etiquetas div deseadas, así que estoy obligado a usar este enfoque para realizar un seguimiento exacto de cuándo no aparece y luego ajustar mi matriz de simple_html_dom en consecuencia) .

De todos modos, esto resolvería mi problema.

Muchas gracias.

Respuesta

54
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match); 
if($match) echo "result=".$match[1]; 
+1

Funciona perfecto. Me salvaste varias horas que tienes allí, muchas gracias por eso. –

+1

De nada :) – serg

+0

¿No es probable que no coincida? Ver mi respuesta a continuación. –

6

¿Qué pasa si la cadena que está a juego tiene varias líneas y es:

<p class="review"> Desired text1 </p> 
<p class="review"> Desired text2 </p> 
<p class="review"> Desired text3 </p> 

Ese patrón coincidiría una vez, y el partido sería todo en la cadena.

Creo que es mejor un patrón:

"'<p class=\"review\">([^<]*)</p>'si" 
+0

sí, gracias, he estado probando cosas durante las últimas 2 horas y finalmente me di cuenta de que las existencias se muestran con JavaScript, después de que se carga la página: (((así que, es por eso el script no funcionaba gracias –

+0

Definitivamente la respuesta correcta. – user1645377

10

si desea volver varias coincidencias continuación, tendrá que utilizar preg_match_all(). A continuación, recorre el segundo grupo de resultados ($ match [1]) para obtener solo el contenido entre las etiquetas.

$source = "<p class=\"review\"> Desired text1 </p>". 
"<p class=\"review\"> Desired text2 </p>". 
"<p class=\"review\"> Desired text3 </p>"; 


    preg_match_all("'<p class=\"review\">(.*?)</p>'si", $source, $match); 

    foreach($match[1] as $val) 
    { 
     echo $val."<br>"; 


    } 

Outputs: 

Desired text1 
Desired text2 
Desired text3 
Cuestiones relacionadas