2011-01-13 92 views
0

我試圖掃描鏈接到某些視頻共享網站的文本,因此我可以在視頻鏈接時創建嵌入式播放器。與視頻分享網站的鏈接

這是我到目前爲止有:

function extract(&$text) { 
    // Scans text for links to YouTube, Vimeo, DailyMotion. 

    // *keep ~discard 
    // youtube.com/watch?v=[*alphanumeric]&[~whatever] 
    // youtube-nocookie.com/watch?v=[*alphanumeric]&[~whatever] 
    // vimeo.com/[*numeric] 
    // dailymotion.com/video/[*alphanumeric]_[~whatever] 

    $sites = 'youtube\.com|youtube-nocookie\.com|vimeo\.com|dailymotion\.com'; 
    $regex = '/^(http|https):\/\/(www\.|)(' . $sites . ')\/.*/'; 
    preg_match_all($regex, $text, $videos); 
    return $videos; 
} 

這是工作古怪。它發現了下面的文字沒有結果:

And what about YouTube videos? 

http://www.youtube.com/timminchin#p/a/u/2/zkGEbRrNNtE 

http://www.youtube.com/timminchin#p/a/f/1/zU4iyjoVWQ 

http://www.youtube.com/watch?v=XzU4iyjoVWQ 

http://www.youtube-nocookie.com 

它發現這段文字一個結果:

http://youtube.com/watch?v=XzU4iyjoVWQ 

https://www.youtube.com/watch?v=XzU4iyjoVWQ 

和其上只包含一個鏈接,並沒有其他的文本工作正常。

我不像使用正則表達式那樣使用正則表達式,並且使用http://www.strfriend.com來幫助我構建這個模型。我想要的只是一個URL數組。

回答

0

正則表達式更改爲以下:

/(http|https):\/\/(www\.|)(' . $sites . ')\/[^\s]*/ 

差異:

在一開始^使得正則表達式只看該文本的開頭,而不是隨處可見。

[\s]在開始時確保您可以在一行文本中找到兩個鏈接。

將不會找到最後一個URL,因爲URL末尾沒有結尾的斜槓。如果您嘗試檢測視頻,但這並不重要,因爲視頻始終位於子頁面上。

+0

經過測試。完美的作品。現在,嵌入的視頻會附加到論壇中帖子的末尾。可愛。 – TRiG 2011-01-13 14:51:28