2011-01-13 7 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 

それはこのテキスト上の1つの結果が見つかりました:

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]は、1行のテキストに2つのリンクがあることを確認しています。

URLの末尾にスラッシュがないため、最後のURLは見つかりません。しかし、ビデオを検出しようとしている場合は、ビデオは常にサブページにあるため、これは問題にはなりません。

+0

テスト済みです。完璧に動作します。今埋め込まれたビデオは、フォーラムの投稿の最後に追加されます。美しい。 – TRiG

関連する問題