<?php
$str = 'Пирвет <a target="_blank" href="buratino.php">Буратино</a>! Я сдал тебя злому <a href="ftp://zxcv.ru/upload/" target="_top">Карабасу</a>, чтобы тот повесил <a target="_blank" href="https://fdsa.ru/buratino.php">тебя</a> на крюк!
Крюк находится здесь - http://php.net/ , здесь ftp://qwer.com/ и тут https://asdf.com/index.php?query=kruk .
Удачи тебе Буратино!';
echo $str;
echo "<br />";
preg_match_all ("#(?<!href=\")(?:http|https|ftp)://[a-z0-9-.]{2,}\.[a-z]{2,10}[^\s]*#im", $str, $links);
$number = count ($links[0]);
for ($i = 0; $i <= $number; $i++) {
$str = str_replace ($links[0][$i], "<b>". $links[0][$i] ."</b>", $str);
}
echo "<br />". $str ."<br /><pre>";
var_dump ($links);
?>