2010-05-29 76 views
2

在Facebook或Twitter上说,当我输入“www.google.com”并提交它时,它就成为一个链接。我如何在PHP中编码?我是否使用正则表达式来获取www开始和.com结束的位置?如何使URL文本成为链接?

这是他们怎么做的?

<?PHP 
//some regular expression to get www and .com part 
$link="<a href='$url'>$url</a>"; 
echo $link; 
?> 

如何编写正则表达式来获取“www”和“.com”部分?

对于twitter的@obama,奥巴马将成为奥巴马网站的链接。 他们使用什么正则表达式来获取@之后和空格之前的文本?

回答

7
<?php 

$str = "Lorem http://myyn.org dolor sit amet, http://google.com adipisicing .."; 

$str = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is", 
        "\\1<a href=\"\\2\">\\2</a>", 
        $str); 

echo $str . "\n"; 

?> 

例子:

$ php 2935574.php 
Lorem <a href="http://myyn.org">http://myyn.org</a> dolor sit amet, \ 
<a href="http://google.com">http://google.com</a> adipisicing elit. 
+0

谢谢。我是新来的正则表达式,所以它需要一些时间来消化这个。 – jpjp 2010-05-29 15:24:29

3

而对于Twitter的,你可以使用这样的事情。

$str = "@obama This is a test"; 
$str = preg_replace('/@([\w-]+)/', '@<a href="http://twitter.com/\\1">\\1</a>', $str); 
echo $str; // @<a href="http://twitter.com/obama">obama</a> this is a test 
+0

谢谢!完美的作品。现在我试图理解它。 \ 1和\ 2究竟是什么? – jpjp 2010-05-29 15:38:18

+0

在括号“'('和')'”之间匹配的文本可以通过使用\\\ [数字]来引用,第一个括号将在\\ 1中,第二个在\\ 2中,依此类推。另见http://www.regular-expressions.info/brackets.html。 可以在http://www.regular-expressions.info/charclass.html找到有关我的单词字符简写('\ w')的良好阅读。 – Piro 2010-05-29 15:46:43

+0

啊我明白了,那让我感动。我会看书。 – jpjp 2010-05-29 15:50:18

相关问题