Foros del Web » Programando para Internet » PHP »

problemas con preg_match_all

Estas en el tema de problemas con preg_match_all en el foro de PHP en Foros del Web. Hola a tod@s. Tengo un problema con la función preg_match_all recojo desde file_get_contents una página donde me devuelve un string, luego utilizo preg_match_all('/<a href="(.*)"\/>/',$html,$respuestas); para ...
  #1 (permalink)  
Antiguo 13/05/2010, 11:35
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
problemas con preg_match_all

Hola a tod@s.

Tengo un problema con la función preg_match_all recojo desde file_get_contents una página donde me devuelve un string, luego utilizo preg_match_all('/<a href="(.*)"\/>/',$html,$respuestas); para poder coger todos los links de esta página.

Pero no me sale nada, en cambio si en vez de utilizar file_get_contents lo hago desde un string cualquiera si que funciona (pes para hacer una prueba). ¿Sabéis si lo que devuelve file_get_contents es un tipos de srting raro o si he de implementar algo más?

Pongo el código:

$url = "http://www.vinosyrecetas.com";

$html = file_get_contents($url);

preg_match_all('/<a href="(.*)"\/>/',$html,$respuestas);


foreach($respuestas[1] as $valor){

$direccion = $valor;

echo $direccion.'<br/>';
}

Gracias y un saludo
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #2 (permalink)  
Antiguo 13/05/2010, 11:42
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: problemas con preg_match_all

Código PHP:
Ver original
  1. preg_match_all('/<a.*?href=["\'](.*?)["\'].*?\/s>/',$html,$respuestas);

te modifique un poco la expresion.. intenta ahora?

PD: la volvi a modificar ..
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 14/05/2010, 05:20
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: problemas con preg_match_all

Hola muchas gracias por la ayuda!
Pero nada no me sale resultado alguno, tu lo has probado y te sale ? a ver si es algo de configuración.
Saludos!!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #4 (permalink)  
Antiguo 14/05/2010, 07:15
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: problemas con preg_match_all

o.O se me corrio una s
ahora si

Código PHP:
Ver original
  1. preg_match_all('/<a.*?href=["\'](.*?)["\'].*?\/>/s',$html,$respuestas);

PD. si me salen los resultados.. seguro que tu file_get_contents te trae bien los datos?
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 14/05/2010, 10:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: problemas con preg_match_all

Hey, pues si!! El problema era la /s ahora me va perfecto así
preg_match_all('/<a.*?href=["\'](.*?)["\'].*?\/>/s',$html,$respuestas);

Mil gracias!! Saludos!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #6 (permalink)  
Antiguo 18/05/2010, 12:32
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: problemas con preg_match_all

hola no pillo muy bien todo este tema :(

Si quiero ahora coger los datos que hay en entre estas etiquetas donde está .* por deducción me saldría así:
$str='/<div class="caja_titulo">Dirección</div>.*</div>/';
preg_match_all($str,$html_2,$respuestas_2);

foreach($respuestas_2[1] as $valor_2){

$direccion_2 = $valor_2;

echo $direccion_2.'<br/>';

}

pero no me pinta nada!!
¿sabéis como solucionarlo? y donde hay tutoriales para saber como hacer todo esto?
Saludos y gracias!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #7 (permalink)  
Antiguo 18/05/2010, 12:39
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: problemas con preg_match_all

.* significa cualquier caracter (menos salto de linea) que se repita 1 o mas veces
si usas un .*?< va a significar cualquier caracter (menos salto de linea) hasta que aparesca un signo < de forma no avariciosa (busca la coincidencia mas pequeña)

mas informacion
www.php.net/PCRE
__________________
More about me...
~ @rhyudek1
~ Github
  #8 (permalink)  
Antiguo 18/05/2010, 14:43
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: problemas con preg_match_all

Ok, me lo estoy mirando pero esta complicado. Lo de la coincidencia más pequeña en teoría me gustaría coger este fragmento del código.
<div class="caja_titulo">Dirección</div>(AQUÍ HAY UN SALTO DE LINEA)
<div>Sant Francesc 27 bj<br>43201 - <b>Reus</b> (España)</div>
Que sería, la dirección, CP, Población y el país, sería así:
preg_match_all('<div>*.?<br>*.? - <b>*.?</b> (*.?)</div>',$html_2,$respuestas_2);
Muchas gracias!!
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com
  #9 (permalink)  
Antiguo 18/05/2010, 16:37
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: problemas con preg_match_all

*.? esta al reves..
.*? es asi xB
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 18/05/2010, 17:58
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: problemas con preg_match_all

Un pequeño aporte:

http://www.phpvideotutorials.com/regex/
  #11 (permalink)  
Antiguo 19/05/2010, 04:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 296
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: problemas con preg_match_all

wiwi74 lo miraré a ver que tal. gracias.

Hidek1, sorry en mi programación si que lo tenía bien, al hacer pruebas lo he pegado así pero ya tenía
.*?, he encontrado una manera que me ponga todo lo que hay entre etiquetas con esto
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $html_2, $respuestas_2, PREG_PATTERN_ORDER);
Pero me gustaría que excluyera todo menos cuando llega al trozo de código de
<div class="caja_titulo">Dirección</div>
y solo me pusiera los 4 siguentes. ¿sabes de alguna manera para poder hacer esto:
$html_2='<div class="caja_titulo">Dirección</div>(AQUÍ HAY UN SALTO DE LINEA)
<div>Sant Francesc 27 bj<br>43201 - <b>Reus</b> (España)</div>';

preg_match_all('<div class=\"caja_titulo\">Dirección</div><div>.*?<br>*.? - <b>.*?</b> .*?<',$html_2,$respuestas_2);

es que así no va.
gracias
__________________
Visitar:
www.vinosyrecetas.com
www.galerias-arte.com

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 02:58.