PHP preg_replace - www или http: // - PullRequest
3 голосов
/ 29 мая 2011

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

Пример: Harry you're a <a href="http://google.com" rel="nofollow">http://google.com</a> wizard! = Harry you're a $lhttp://google.com$l wizard!

Пример: Harry you're a <a href="http://www.google.com" rel="nofollow">http://www.google.com</a> 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: (

Ответы [ 3 ]

13 голосов
/ 29 мая 2011

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

$pattern = "/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{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] соответствующими значениями.

1 голос
/ 25 июля 2013
$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;
1 голос
/ 29 мая 2011

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

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

В этом случае вам, вероятно, следует использовать функцию 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 и поместила теги, которые я указал, вокруг него.

...