2013-11-04 53 views
1

所有社區!鏈接和圖像嵌入正則表達式

我是新來的正則表達式,我有他們的麻煩。 我有一個簡單的用戶數據解析器的聊天腳本。 有一種能夠嵌入帶有BBCode標籤的圖像,如下所示:[img]http://example.com/image.png[/img]。 我也想做自動鏈接轉換爲有效的超鏈接。 我有兩個處理REGEXes,我不知道如何解決它們之間的衝突。

要處理[img]標籤我用這個和它的第一個執行:

$line = preg_replace('/\[img\](https?:\/\/[a-zA-Z0-9%\-_?&=:+.\/]+)\[\/img\]/iU', '<a href="$1" target="_blank"><img class="incl_img" src="$1"></a>', $line, 5); 

然後處理我用這個鏈接:

$line = preg_replace('#(https?:\/\/([a-zA-Z0-9-.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e', '\'[<a href="$1" title="$1" target="_blank">$2</a>]\'',$line); 

當用戶帖子的鏈接處理,正則表達式打破<img>圖像標記插入其<a href=...而不是鏈接。如何避免使用特殊的[url]標籤或其他東西?如何將[img]標籤與簡單鏈接分開?正則表達式和/或算法的任何修正都是受歡迎的。提前致謝!

回答

0

我解決我的問題。解決方法是糾正第二個正則表達式(URL解析器)並添加一些條件。新的正則表達式看起來像這樣:

#(?<!src="|href=")(https?:\/\/([a-zA-Z0-9\-\.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e' 

而且整個代碼變成這樣:

$line = preg_replace('#(?<!src="|href=")(https?:\/\/([a-zA-Z0-9\-\.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e', '\'[<a href="$1" title="$1" target="_blank">$2</a>]\'',$line); 
0

試試這個小助手功能:

function parseCode($txt) 
{ 
    // these functions will clean the code first 
    $ret = strip_tags($txt); 

    // code replacements 
    $ret = preg_replace('#\[link\=(.+)\](.+)\[\/link\]#iUs', '<a href="$1">$2</a>', $ret); 
    $ret = preg_replace('#\[img\](.+)\[\/img\]#iUs', '<img src="$1" alt="Image" />', $ret); 

    // return parsed string 
    return $ret; 
} 

用法:

echo parseCode('[link=https://www.google.com]Click here to go to google[/link]'); 
echo "<br />"; 
echo parseCode('[img]https://www.google.co.uk/images/srpr/logo11w.png[/img]'); 
+0

感謝您的回覆,但我說,我不希望使用任何UBB標籤來處理鏈接。是不是可以讓它們自動突出顯示,並在'[img]'標籤中使用它們時忽略它們? – namikiri