PHP / RegEx - конвертировать URL-адреса в ссылки путем обнаружения .com / .net / .org / .edu и т. Д.

Я знаю, что было много вопросов с просьбой помочь преобразовать URL-адреса в интерактивные ссылки в строках, но я не нашел именно то, что искал.

Я хочу иметь возможность сопоставить любой из следующих примеров и превратить их в интерактивные ссылки:

<code>http://www.domain.com
https://www.domain.net
http://subdomain.domain.org
www.domain.com/folder
subdomain.domain.net
subdomain.domain.edu/folder/subfolder
domain.net
domain.com/folder
</code>

Я не хочу совпадать с random.stuff.separated.with.periods.

РЕДАКТИРОВАТЬ: имейте в виду, что эти URL-адреса должны быть найдены в более крупных строках «обычного»; текст. Например, я хочу сопоставить «домен.нет» в & quot; Привет! Заходите, проверьте domain.net! & Quot ;.

Я думаю, что это может быть достигнуто с помощью регулярного выражения, которое может определить, содержит ли соответствующий URL-адрес .com, .net, .org или .edu, за которым следует косая черта или пробел. Кроме опечатки пользователя, я не могу представить ни одного другого случая, в котором действительный URL имел бы один из тех, за которыми следовало бы что-нибудь еще.

Я понимаю, что существует много действительных доменных расширений, но мне не нужно поддерживать их все. Я могу просто выбрать, что поддерживать с чем-то вроде (com | net | org | edu) в регулярном выражении. К сожалению, я недостаточно квалифицирован в области регулярных выражений, чтобы знать, как правильно это реализовать.

Я надеюсь, что кто-то может помочь мне найти регулярное выражение (для использования с preg_replace в PHP), которое может сопоставлять URL-адреса, основанные практически на любом тексте, связанном одной или несколькими точками и заканчивающемся одним из указанных расширений, за которым следует пробел ИЛИ содержащий одно из указанных расширений, за которым следует косая черта и, возможно, папки.

Я провел несколько поисков и до сих пор не нашел того, что искал. Если там уже есть пост, который отвечает на это, я прошу прощения.

Заранее спасибо.

--- РЕДАКТИРОВАТЬ 3 ---

После нескольких дней проб и ошибок и некоторой помощи от SO вот что работает:

<code>preg_replace_callback('#(\s|^)((https?://)?(\w|-)+(\.(\w+|-)*)+(?<=\.net|org|edu|com|cc|br|jp|dk|gs|de)(\:[0-9]+)?(?:/[^\s]*)?)(?=\s|\b)#is',
                create_function('$m', 'if (!preg_match("#^(https?://)#", $m[2]))
                return $m[1]."<a href=\"http://".$m[2]."\">".$m[2]."</a>"; else return $m[1]."<a href=\"".$m[2]."\">".$m[2]."</a>";'),
                $event_desc);
</code>

Это модифицированная версия приведенного ниже кода анубхавы, и до сих пор, кажется, она делает именно то, что я хочу. Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос