2012-09-18 38 views
1

冲突的所以我有这个在这里的preg_replace正则表达式与他人

<? $regex = array('/@(\w+)/','/#(\w+)/','/((www|http:\/\/)[^ ]+)/'); 
    $replace = array(
    '<a href="https://www.twitter.com/$1">@$1</a>', 
    '<a href="https://twitter.com/#!/search/%23$1">#$1</a>', 
    '<a href="\1">\1</a>' 
); ?> 

<?= preg_replace($regex,$replace,stripslashes($row['tweet_text']));?> 

前两个假设把一个使用@任何东西,#转换为链接。这显然是用于推特。但第三个应该是用http或www把任何东西变成链接。但它似乎与前两个混淆链接相冲突。

我如何使第三个使http或www链接没有冲突的另外两个?

回答

1

这将是哈克在最好的,但你可以试试这个:

<? $regex = array('/((www|http:\/\/)[^ ]+)/', '/(?<!>)@(\w+)/', '/(?<!>)#(\w+)/'); 
    $replace = array(
    '<a href="\1">\1</a>', 
    '<a href="https://www.twitter.com/$1">@$1</a>', 
    '<a href="https://twitter.com/#!/search/%23$1">#$1</a>' 
); ?> 

打开命令周围,第一固定的联系,则只有更换@#处理,如果他们没有被前面>(如果他们已经在锚标签内,他们将会是)。

+0

哇,它像一个魅力工作。 – mystycs

+0

所以基本上我不得不正确地订购它们。 – mystycs

+0

@soniccool:基本上,是的。 '(?)'只是一个额外的预防措施。 –