Foros del Web » Programando para Internet » PHP »

expresiones regulares: Sacar los links de una pagina

Estas en el tema de expresiones regulares: Sacar los links de una pagina en el foro de PHP en Foros del Web. Hola de nuevo. Yo soy yo y las expresiones regulares son las expresiones regulares, y digamos que somos bastante incompatibles :-p . Bueno mi proyecto ...
  #1 (permalink)  
Antiguo 27/04/2004, 11:09
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
expresiones regulares: Sacar los links de una pagina

Hola de nuevo. Yo soy yo y las expresiones regulares son las expresiones regulares, y digamos que somos bastante incompatibles :-p .

Bueno mi proyecto era sacar los links de una pagina, un documento cualquiera. La idea es sacar el codigo fuente y luego que las expresiones regulares hagan el resto, sacandome limpiamente el destino del link y el texto que tiene el destino. El codigo es:

Código PHP:
<?php

$pagInicial
="http://www.regular-expression.info/";
$regExp="/<a.{1,}href=\"?([a-zA-Z:\.\/]*)\"?.{0,}>(.*)<\/a>/i";

$code=join("",file($pagInicial));
preg_match_all($regExp,$code,$matches);

$encontrados=$matches;
$nCoincidencias=count($encontrados[1]);
echo 
$nCoincidencias." coincidencias encontradas<br>";
?><ol><?
for($a=0;$a<$nCoincidencias;$a++) {
    echo 
"<li>".$encontrados[1][$a]." (".$encontrados[2][$a].")</li>";
}
?></ol>

<p>La pagina original es:</p>

<p><iframe src="<?=$pagInicial?>" width="100%" height="100%"></iframe>
Y viene totalmente completo, con los ejemplos y la pagina de la que se intenta sacar los links (que casualmente es una pagina de expresiones regulares ). Bueno yo tenia un documento mio, pero como que no es plan de mandarlo tambien para ver el ejemplo .

Bueno, creo que el problema esta claro. Tendria que encontrar muchas coincidencias y solo encuentra dos. Obviamente este es un fallo de expresiones regulares, pero no consigo solucionarlo por muchas pruebas que he realizado.


A ver si a alguien se le ocurre algo. Abierto a sugerencias de todo tipo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 27/04/2004, 11:53
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola Derkenuke, prueba esta función:
function linka3($mensaje) {
$mensaje = eregi_replace('(((f|ht){1}(tp|tps){1}://)[-a-zA-Z0-9@:%_+.~#?&//=]+)', '<a href="\1" target="_blank">\1</a>', $mensaje);
$mensaje = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', '\1<a href="http://\2" target="_blank">\2</a>', $mensaje);
return $mensaje;
}
  #3 (permalink)  
Antiguo 27/04/2004, 12:11
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
No lo entiendo, ¿como se usa?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 27/04/2004, 12:20
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 5 meses
Puntos: 0
Las funciones acostumbran a ir al principio del script, y a la hora de pasar el texto por la función, solo hay que llamarla, linka3($mensaje); y te devolvera el texto con los www.etc.com convertidos en links
  #5 (permalink)  
Antiguo 27/04/2004, 12:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Ah, ok, ahora si lo entiendo. La verdad poco me sirve para mi proposito, poco he sacado en claro de la funcion, porque no me busca enlaces, simplemente reemplaza si encuentra algo parecido a una direccion web absoluta. Buscaba algo parecido a la que tengo yo en el primer mensaje, pero bueno, gracias por la ayuda igualmente.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 28/04/2004, 10:35
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
jo no encuentro solucion. Nadie puede ayudarme??

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 28/04/2004, 10:59
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
No se si entiendo bien la pregunta , pero por lo que entiendo
es que quieres despejar los links de tags <a

Prueba ese codigo

Código PHP:
 preg_match_all("/<a.*?>(.*?)<\/a>/is"$html,$tags);
preg_match_all("/href=\"(.*?)\"/is"$html,$tags2); 
Aqui te da un array, de dos dimensiones, pruebalo y saca el array con print_r() y ves que parte te interesan
Código PHP:
echo "<pre>";
print_r($tags);
echo 
"</pre>";

echo 
"<pre>";
print_r($tags2);
echo 
"</pre>"
Espero que te sirva

saludos
  #8 (permalink)  
Antiguo 28/04/2004, 11:23
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
SI SEÑOR!!

Muchisimas gracias me ha ayudado muchisimo!

Un saludo Jordi1!!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 05:34.