2012-09-18 63 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:基本上,是的。 '(?)'只是一個額外的預防措施。 –