PHP preg_replace - www或http://

时间:2011-05-29 02:09:47

标签: php url preg-replace spaces

真的坚持看似简单的事情。我有一个聊天框/ 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专家:(

3 个答案:

答案 0 :(得分:13)

有一篇关于URL regular expression的有趣文章。在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 :(得分:1)

你会想要使用所谓的Regular Expression

你应该编写一个正则表达式,然后使用PHP的各种regexp functions中的一个来做你想要的。

在这种情况下,你应该使用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()函数在$text中找到了网址(并且会找到多个),并将我指定的标记放在其周围。

答案 2 :(得分:1)

$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;