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