Foros del Web » Programando para Internet » PHP »

Duda con preg_match_all();

Estas en el tema de Duda con preg_match_all(); en el foro de PHP en Foros del Web. Buenas, Estoy trantando de extraer de un HTML las etiquetas td que encuentro mediante este código, pero me devuelve nada... y realmente no sé dónde ...
  #1 (permalink)  
Antiguo 05/07/2010, 01:53
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Duda con preg_match_all();

Buenas,

Estoy trantando de extraer de un HTML las etiquetas td que encuentro mediante este código, pero me devuelve nada... y realmente no sé dónde está el error, pues el código en sí es sencillo:

Código:
$url = //aquí la url de donde cojo;
$input = @file_get_contents($url) or die("Could not access file: $url"); 
$pattern = '/<td.*td>/';

preg_match_all($pattern, $input, $matches);
echo $matches[0];
Debería devolverme la 1ª coincidencia que encontrará con etiquetas <td> no? O lo estoy haciendo mal :S

Gracias!
  #2 (permalink)  
Antiguo 05/07/2010, 02:59
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Duda con preg_match_all();

Cita:
Iniciado por sitoatic Ver Mensaje
Buenas,

Estoy trantando de extraer de un HTML las etiquetas td que encuentro mediante este código, pero me devuelve nada... y realmente no sé dónde está el error, pues el código en sí es sencillo:

Código:
$url = //aquí la url de donde cojo;
$input = @file_get_contents($url) or die("Could not access file: $url"); 
$pattern = '/<td.*td>/';

preg_match_all($pattern, $input, $matches);
echo $matches[0];
Debería devolverme la 1ª coincidencia que encontrará con etiquetas <td> no? O lo estoy haciendo mal :S

Gracias!
Siempre me ha gustado más guarrear con explode que meterme en exp. regulares

Código:
$url = //aquí la url de donde cojo;
$input = @file_get_contents($url) or die("Could not access file: $url"); 
$matches = array();
$array = explode ("<td>", $input);
array_shift($array); // el 1º resultado no interesa
foreach ($array as $val){
unset($split);
$split = explode("</td>", $val);
$matches[] = $split[0]; 
}
Lo mismo me he colado, que no lo he probado, pero...
Algo así debería ir almacenando en $matches lo que haya entre <td> y </td>

Última edición por falotron; 05/07/2010 a las 03:07
  #3 (permalink)  
Antiguo 05/07/2010, 03:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda con preg_match_all();

Gracias falotron por la ayuda.

Creo que más o menos he conseguido el objetivo ya utilizando el preg_match_all, que creo que en este caso me va mejor que el explode.

Lo que no consigo es excluir etiquetas:

$pattern = '/<td [^a href].*td>/siU';

Quiero excluir todas las etiquetas 'a' que encuentre pero nanai de la china
  #4 (permalink)  
Antiguo 05/07/2010, 09:50
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Duda con preg_match_all();

Cuando tengas un poco de tiempo mirate estos videos:

http://www.phpvideotutorials.com/regex/
  #5 (permalink)  
Antiguo 05/07/2010, 09:56
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Duda con preg_match_all();

Y prueba si a ver:

Código PHP:

//modo 1
// $patron = '/<td>(.*?)<\/td>/is'; 

//modo 2
$patron '/<td>((?:(?!td>).)*)<\/td>/isU'

preg_match_all($patron$texto$matchesPREG_SET_ORDER); 
//preg_match_all($patron, $texto, $matches); 
                 
echo count($matches); 

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:18.