Действительно застрял на том, что кажется чем-то простым. У меня есть 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;