Aquí un ejemplo aplicado:
Código PHP:
<?php
function get_links($string) {
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/is';
preg_match_all ($patron, $string,$coincidencias);
return $coincidencias[0];
};
function redlink($link,$largopartes){
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/i';
preg_match_all ($patron, $link,$coincidencias);
$s='/\<a href\=(.*?)\>(.*?)\<\/a\>/se';
if(strlen($coincidencias[2][0])>($largopartes<<1))
$r='"<a href=$1>".substr("$2",0,"$largopartes")."...".substr("$2","-$largopartes")."</a>"';
else
$r='"<a href=$1>$2</a>"';
$t=preg_replace ($s, $r, $link);
return $t;
}
foreach(get_links(file_get_contents('http://www.php-hispano.net/foros/PHP/19794'))as $v)
echo '<br />'.redlink($v,5);
?>
Bueno, lo demás ya no hace falta aclararlo: teniendo todos los links reales en una matriz y en otra los reemplazos, un str_replace y listo!