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>
Это модифицированная версия приведенного ниже кода анубхавы, и до сих пор, кажется, она делает именно то, что я хочу. Спасибо!