Используйте preg_replace_callback
вместо этого, и вы можете запросить совпадение, чтобы узнать, нужно ли вам добавить протокол.
function toLink($titulo) {
$url = '~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i';
$titulo = preg_replace_callback($url, function($matches) {
$url = $matches[0];
if (!preg_match('/^https?:\/\//', $url)) $url = 'http://'.$matches[0];
'<a href="'.$url.'" target="_blank" title="'.$url.'">'.$url.'</a>';
}, $titulo);
return $titulo;
}