Я начинаю с этой строки PHP.
$bodyString = '
another 1 body
reg http://www.regularurl.com/home
secure https://facebook.com/anothergreat.
a subdomain http://info.craig.org/
dynamic; http://www.spring1.com/link.asp?id=100408
www domain; at www.wideweb.com
single no subdomain; simple.com';
Необходимо превратить все домены, URL-адреса в элементы привязки (<a>).
preg_replace('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', '<a href = "$0">$0</a>', $bodyString)
$bodyString результат:
'another 1 body
reg <ahref = "http://www.regularurl.com/home">http://www.regularurl.com/home</a>
secure <a href = "https://facebook.com/anothergreat.">https://facebook.com/anothergreat.</a>
a subdomain <a href = "http://info.craig.org/">http://info.craig.org/</a>
dynamic; <a href = "http://www.spring1.com/link.asp">http://www.spring1.com/link.asp</a>?id=100408
www domain; at <a href = "www.wideweb.com">www.wideweb.com</a>
single no subdomain; <a href = "simple.com">simple.com</a>';
Результат: Все url, домены превращены в <a>Кромеhttp://www.spring1.com/link.asp?id=100408
Чего не хватает в регулярном выражении, чтобы эта работа работала?
Я думаю, что если вы можете написать столько регулярных выражений, сколько в вопросе, вы можете найти решение самостоятельно. Прежде чем копировать вставленный код из Интернета, обязательно попробуйте его со своей стороны и опубликуйте свое исследование.






$bodyString = '
another 1 body
reg http://www.regularurl.com/home
secure https://facebook.com/anothergreat.
a subdomain http://info.craig.org/
dynamic; http://www.spring1.com/link.asp?id=100408
www domain; at www.wideweb.com
single no subdomain; simple.com';
$regex = '@(http)?(s)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
$converted_string = preg_replace($regex, '<a href = "$0">$0</a>', $bodyString);
echo $converted_string;
Регулярное выражение Описание здесь
[-\w@:%+.\~#?&/=]{2,256}\.[a-z]{2,4}\b[^\s]*
[^\s]* добавит в URL-адрес любой непробельный символ. Когда есть пробел, это не часть URL-адреса. Просто и легко.
рабочий url здесь
Основываясь на комментарии @ WiktorStribiżew, вы можете попробовать это:
[^\s]{2,256}\.[a-z]{2,4}\b(?:[?/][^\s]*)*
Примечание - Хотя на данный момент есть уже 2 ответа, это кажется более кратким, используя [^\s]
[^\s]{2,256} соответствует от 2 до 256 символов, что является частью https://facebook и https://www.randomdomain, \. соответствует точке после этого, [a-z]{2,4} - это расширение домена, например: com, in и т. д. \b - граница слова, (?:[?/][^\s]*)* - это группа без захвата, которая соответствует либо косой черте /, либо вопросительному знаку ? и большему количеству URL-адресов, все из которых могут повторяться ноль или более раз, указывая подстраницы URL-адреса.
Чтобы лучше понять синтаксис регулярных выражений, вам следует попробуйте этот сайт: rexegg.com
Может быть, это поможет.