Найти url из строки с php

следующий код используется для поиска url из строки с php. Вот код:

$string = "Hello http://www.bytes.com world www.yahoo.com"; preg_match('/(http:\/\/[^\s]+)/', $string, $text); $hypertext = "<a href=\"". $text[0] . "\">" . $text[0] . "</a>"; $newString = preg_replace('/(http:\/\/[^\s]+)/', $hypertext, $string); echo $newString; 

Ну, он показывает ссылку, но если я предоставляю несколько ссылок, это не сработает, а также, если я пишу без http: //, тогда он не будет показывать ссылку. Я хочу, чтобы всякая ссылка была предоставлена, она должна быть активной, например, stackoverflow.com.

Любая помощь пожалуйста ..

Рабочий метод для связывания с http / https / ftp / ftps / scp / scps: $newStr = preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?&_/]+!', "<a href=\"\\0\">\\0</a>",$str);

Я настоятельно рекомендую НЕ связывать, когда у него есть только точка, потому что он рассмотрит ссылки на PHP 5.2, ASP.NET и т. Д., Что вряд ли приемлемо.

Обновление: если вы хотите www. струны также, взгляните на это .

Если вы хотите обнаружить что-то вроде stackoverflow.com , тогда вам нужно будет проверить все возможные TLD, чтобы исключить что-то вроде Web 2.0 , что довольно длинный список . Тем не менее, это также будет соответствовать чему-то как ASP.NET и т. Д.

Регулярное выражение будет выглядеть примерно так:

 $hypertext = preg_replace( '{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net)\b}mi', '<a href="http://$1$2$3">$1$2$3</a>', $text ); 

Это соответствует совпадениям доменов, заканчивающихся на .com, .org и .net … как указано ранее, вам нужно будет расширить этот список, чтобы соответствовать всем TLD

@axiomer ваш пример не работал, если ссылка будет в формате:

https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl

правильное решение:

 preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?%=&_/]+!', "<a href=\"\\0\">\\0</a>", $content); 

производит:

 <a href="https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl">https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl</a>