5

現在、YT 動画 ID を区切るために正規表現コードを使用しています。私が正規表現を使用している理由は、yt ビデオの URL が多くの形式で異なるためです。以下のものを除くほとんどすべての YT URL 形式の ID をほとんど検出する正規表現を作成しました。私はそれを変更しようとしましたが、運がありません。以下の URL から id を正規表現で削除する方法はありますか?

http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ

正規表現:

('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w]*~ix','http://www.youtube.com/watch?v=$1',$url);
4

4 に答える 4

3

文字列操作はどうですか?「v=」を見つけて、次の「&」まで読み始めますか? これにより動画 ID が得られ、後で URL を簡単に作成できます

于 2012-07-20T06:56:12.230 に答える
0

以下が機能するはずです。

(&|\?)v=(\w*)(&|$)

&orで始まるものをすべて取得し?、次に id 、次に次&または end を取得します。

PHP はよくわかりませんが、文字列を置き換えようとしていることがわかります。それは完全には機能しないはずです。あなたがすべきことは、次の一致を取得し、それを文字列に追加して独自の URL を作成することだと思います。

preg_match('(&|\?)v=(\w*)(&|$)', $url, $matches);
$res = 'http://www.youtube.com/watch?v=' + $matches[1]

そして、$res は必要な URL になります。

于 2012-07-20T07:05:29.277 に答える
0

参考までに、私が見つけたすべてのバリエーションで機能するこのコードを使用します。

    function getYouTubeId($url)
    {
        $pattern = '#^(?:https?://|//)?(?:www\.|m\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#';
        preg_match($pattern, $url, $matches);
        return (isset($matches[1])) ? $matches[1] : false;
    }

これらのバリエーションでテスト済み:

http://www.youtube.com/watch?v=-wtIMTCHWuI
http://www.youtube.com/v/-wtIMTCHWuI?version=3&autohide=1
http://youtu.be/-wtIMTCHWuI
https://www.youtube.com/embed/-wtIMTCHWuI

少し前にこの投稿から最初に機能を見つけました。

于 2016-05-25T22:50:20.703 に答える
-1

なぜあなたはちょうど

$url = "http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ&hello=ok";
$stop = strlen($url);
$pos = strpos($url,'v=')+2;
$x = strpos($url,'&',$pos);
if($x)
    {
    $x = $x - $pos;
    $stop = $x;
    }
$str = substr($url,$pos,$stop);
echo $str;

基本的に常に av= ... で始まります。

于 2012-07-20T07:01:46.247 に答える