Попробуйте следующий код:
$source = '@username tweet body message http://t.co/sfr34s5';
$pattern = '/(http:\/\/[a-z0-9\.\/]+)/i';
$replacement = '<a href="$1" target="_blank">$1</a>';
$source = preg_replace($pattern, $replacement, $source);
Регулярное выражение будет соответствовать всем строкам, которые начинаются с 'http://' и сопровождаются последовательностью буквенно-цифровых значений, косой чертой или точками.
Это должно работать во всех случаях, однако, если вы только пытаетесь извлечь ссылки t.co, вы можете использовать эту более безопасную версию шаблона:
$pattern = '/(http:\/\/t\.co\/[a-z0-9]+)/i';
Это будет соответствовать только 'http://t.co/[alnum-chars].
Вам придется изменить шаблон в соответствии с вашими требованиями, если вам нужно сопоставить все URL-адреса. Например. чтобы соответствовать http://t.co/abcde?x=1&y=2, вам необходимо использовать следующий шаблон:
$pattern = '/(http:\/\/[a-z0-9\.\/?=&]+)/i';
Я протестировал это на PHP5.3, и он работал с указанным вами URL.