Yo no la enroscaría con una expresión regular, podés usar la clase DOMDocument
Código PHP:
Ver originalfunction extraer_title($url)
{
{
return false;
}
$doc = new DOMDocument();
$doc->loadHTML($html);
$title = $doc->getElementsByTagName('title');
if ($title->length)
{
return $title->item(0)->textContent;
}
return false;
}
Revisá la función extraerURLs() porque no está bien, en Google vas a encontrar muchos ejemplos de expresiones regulares para extraer todas las urls de una cadena.
Y lo implementás así:
Código PHP:
Ver original// Suponiendo que devuelve un array con todas las urls
$urls = extraerURLs($cadena);
//Acá vamos a guardar los links
// Índice: la url
// Valor: la etiqueta del link
// Recorre
foreach($urls as $u)
{
$title = extraer_title($u);
// Si devolvió false ponemos como texto la misma url,
// sino ponemos el title
if (!$title)
{
$replaces[$u] = '<a href="'.$u.'">'.$u.'</a>';
}
else
{
$replaces[$u] = '<a href="'.$u.'">'.$title.'</a>';
}
}
// Y solamente queda remplazarlo
$cadena
);
No está probado pero debería funcionar, me parece más entendible que andar peleando con las expresiones regulares que en este caso no tienen mucho sentido.