Extraer el href con expresiones regulares

Mi intención es de un enlace que recupero de la web quedarme únicamente con el href, es decir:
Si un enlace es <a onBlur=".. Class='enlace' href='www.upv.es' onClick='return(...)'>UPV</a> quedarme sólo con <a href='www.upv.es'>UPV</a>
He intentado hacerlo con ereg_place y he estado bastante cerca de sacarlo pero no he podido, ya que hay algunos casos que se me escapan:
$salida = ereg_place("<a(.*) href=(.*) (.*))>(.*)</a>","<a href=\\2>\\4</a>",$entrada);
el problema que tengo es cubrir todas las posibilidades entre el final del href y el >UPV</a>
puede ser:
... Href='www.upv.es'>UPV</a>
... Href='www.upv.es' >UPV</a>
... Href=www.upv.es>UPV</a>
... (el problema es que a veces puede haber espacio, otras no...)
Si me pudiera ayudar alguien estaría muy agradecido.

2 respuestas

Respuesta
1
creo que esto solucionará el problema: puede existir o no un espacio antes del >
$salida = ereg_replace("<a (.*) href=(.*)[:space:]?>(.*)</a>","<a href=\\2>\\4</a>",$entrada);
Hola David,
antes de nada gracias por responderme tan rápido.
Creo que no plantee del todo bien el problema que tengo, quizás el comentario que hacía de que el problema se trataba de si había o no espacio al final del href te ha confundido, lo siento. La solución que me planteas, para el siguiente caso no funciona como debería:
<a href='www.upv.es' onclik='ye()'>
El 2º (. *) Lo coge todo incluso los espacios, entonces me coge toda la cadena hasta el >, lo correcto sería en vez de (. *) Poner una condición en la cual cogiera cualquier cáracter excepto el espacio. Si me pudieras transformar esa condición en expresión regular (cosa que yo no sé) unido a lo que ya has modificado creo que ya estaría resuelto.
Muchas gracias anticipadas y saludos desde Valencia.
Creo que esto solucionará el problema definitivamente:
$salida = ereg_replace("<a (.*) href=(.*)([:space:].*)?>(.*)</a>","<a href=\\2>\\4</a>",$entrada);
Sigue sin funcionar, el href=(.*) pilla todos los caracteres hasta el >
Tendrás que ser más explícito en tus ejemplos. Yo lo he probado y me funciona:
<?php
$entrada = "<a href='www.tomate.uk/index.htm' onchange='kak'>Titulo</a>";
$salida = ereg_replace("<a (.*) href=(.*)([:space:].*)?>(.*)</a>","<a href=\\2>\\4</a>",$entrada);
echo "Entrada: $entrada<br>";
echo "Salida: $salida";
?>
Hola David, con el ejemplo que me planteas, si hay un espacio entre el 'kak' y el > no funciona, de todas formas muchas gracias.
La siguiente expresión sí que me funciona correctamente:
eregi_replace("<a(.*)href=(.[^ ]*)(.*)>(.*)</a>","<a target='_blank' href=\\2>\\4</a>",$texto);
Gracias.
Respuesta

Bueno pues lo que hice yo y me funciono fue utilizar el método explode(' " ', (etiqueta html)), luego asigno la intentar 1 del array generado por el explode a la variable que contendrá la url

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas