Не понимаю, почему находит простое слово, если я указал границу?
$str = 'http://site.ru, http://site.com, https://site.info sgdf';
echo preg_replace('#\b(https?://)([a-z0-9-]+)\.([a-z]{2,})\b#', '<a href="$1$2.$3">$2.$3</a>', $str);
Должно вывести site.ru, site.com, site.info
а выводит site.ru, site.com, site.info sgdf