PHP preg_replace – www или http: //

Действительно застрял на том, что кажется чем-то простым. У меня есть chatbox / shoutbox, где могут быть введены произвольные URL-адреса. Я хочу найти каждый отдельный URL (разделенный пробелами) и обернуть его в теги.

Пример: Harry you're a http://google.com wizard! = Harry you're a $lhttp://google.com$l wizard!

Пример: Harry you're a http://www.google.com wizard! = Harry you're a $lhttp://www.google.com$l wizard!

Пример: Harry you're a www.google.com wizard! = Harry you're a $lwww.google.com$l wizard!

Извините, если это глупый вопрос; Я просто пытаюсь заставить что-то работать, и я не эксперт по php 🙁

Есть интересная статья о регулярном выражении URL . В PHP это будет выглядеть так:

 $pattern = "/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”'']))/"; $inp = "Harry you're a http://google.com wizard!"; $text = preg_replace($pattern, "[supertag]$1[/supertag]", $inp); 

И, конечно, замените [supertag] и [/supertag] соответствующими значениями.

Вы захотите использовать так называемое регулярное выражение .

Вы должны написать регулярное выражение, а затем использовать одну из различных функций регулярного выражения PHP, чтобы делать то, что вы хотите.

В этом случае вы, вероятно, должны использовать функцию preg_replace (), которая находит строку, которая соответствует вашему регулярному выражению, и заменяет ее по вашему усмотрению.

Регулярное выражение, которое вы ищете, особенно сложно написать, поскольку URL-адреса могут иметь разные формы, но я нашел выражение, которое должно сделать трюк:

 $text = "derp derp http://www.google.com derp"; $text = preg_replace( '@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '[yourtag]$1[/yourtag]', $text ); echo $text; 

Это приведет к выводу:

 derp derp [yourtag]http://www.google.com[/yourtag] derp 

Вы можете видеть, что preg_replace() обнаружила, что URL-адрес (и он найдет несколько) в $text , и поместил теги, которые я указал вокруг него.

 $text = " Helloooo try thiss http://www.google.com and www.youtube.com :D it works :)"; $text = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $text); $regex = "#[ ]+(www.([a-z0-9._-]+))#i"; $text = preg_replace($regex," <a href='http://$1'>$1</a>",$text); echo $text;