2012-01-23 44 views
1

下面的代碼檢測到URL中的文本並將它們包裝在標記中。如何將條件類添加到PHP正則表達式篩選器

function link_it($text) 
    { 

     $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text); 
     $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp|m)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text); 
     $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:[email protected]$3\">[email protected]$3</a>", $text); 
     return($text); 
    } 

我想它,以便如果用戶鍵入的URL(通過上面的功能檢測的)與特定域(的Flickr |的YouTube | VIMEO)等的函數將類「嵌入到標籤模板,否則就離開它沒有階級

'這是網站www.google.com' 將返回:

this is the website <a href="http://www.google.com">http://www.google.com</a> 

,但 '這是網站www.flickr.com' W應該返回

this is the website <a href="http://www.flickr.com" class="embed">http://www.flickr.com</a> 

我該如何去添加到函數中?

回答

1

爲此使用preg_replace_callback()。在您的回調函數中,將URL與一些應具有embed類的URL集匹配,如果匹配,則包含class屬性定義,否則請不要。

+0

它的作品非常漂亮!謝謝。結合parse_url,它提供了一個不錯而優雅的解決方案。很好的回答,有點尷尬,我不知道這個功能! – gordyr

+0

沒問題。很高興我能幫上忙。 – FtDRbwLXw6