$text= eregi_replace("((ht|f)tp://)((([a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3}))|(([0-9]{1,3}\\.){3}([0-9]{1,3})))((/|\\?)[a-z0-9~#%&\'_\\+=:\\?\\.-]*)*)", "
\\\\0", $text);
Это заменяет URL\'s на ссылки...
Можно через eregi искать совпадения...
В общем, формула (RegEX) что бы найти:
((ht|f)tp://)((([a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3}))|(([0-9]{1,3}\\.){3}([0-9]{1,3})))((/|\\?)[a-z0-9~#%&\'_\\+=:\\?\\.-]*)*)
Не знаю, как качается текст, но, теоретически, можно читать его построчно, и сделать что-то вроде:
$mass[]= eregi_replace("((ht|f)tp://)((([a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3}))|(([0-9]{1,3}\\.){3}([0-9]{1,3})))((/|\\?)[a-z0-9~#%&\'_\\+=:\\?\\.-]*)*)", "
\\\\0", $text);
Тогда массив $mass - и будут все URL, достаточно будет вывести этот массив..