0

私はPHPpreg_matchfeature=endscreenYouTubeのURLで動作させようとしましたが、うまくいきませんでした。助言がありますか。

(preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match))

入力例 = http://www.youtube.com/watch?feature=endscreen&NR=1&v=uOHvZjiDANg 必要な出力 = uOHvZjiDANg

4

3 に答える 3

1

これは私のテスト済みのコードです

<?php

function parse_yturl($url) 
{
    $pattern = '#^(?:https?://)?';    # Optional URL scheme. Either http or https.
    $pattern .= '(?:www\.)?';         #  Optional www subdomain.
    $pattern .= '(?:';                #  Group host alternatives:
    $pattern .=   'youtu\.be/';       #    Either youtu.be,
    $pattern .=   '|youtube\.com';    #    or youtube.com
    $pattern .=   '(?:';              #    Group path alternatives:
    $pattern .=     '/embed/';        #      Either /embed/,
    $pattern .=     '|/v/';           #      or /v/,
    $pattern .=     '|/watch\?v=';    #      or /watch?v=,    
    $pattern .=     '|/watch\?.+&v='; #      or /watch?other_param&v=
    $pattern .=   ')';                #    End path alternatives.
    $pattern .= ')';                  #  End host alternatives.
    $pattern .= '([\w-]{11})';        # 11 characters (Length of Youtube video ids).
    $pattern .= '(?:.+)?$#x';         # Optional other ending URL parameters.
    preg_match($pattern, $url, $matches);
    return (isset($matches[1])) ? $matches[1] : false;
}


echo parse_yturl('http://www.youtube.com/watch?feature=endscreen&NR=1&v=uOHvZjiDANg');

?>

出力 = uOHvZjiDANG

ソース: https://github.com/eyecatchup/php-yt_downloader/blob/master/youtube-dl.class.php#L406

于 2012-08-29T19:37:31.200 に答える
0

これを試して:

if(preg_match('/youtube\.com\/(v\/|watch\?v=)([\w\-]+)/', $url, $match)){; $vid=$match[2]; 
}
print "$vid";
于 2012-08-29T19:34:40.417 に答える
0

複雑な正規表現を試すのではなく、次のことをお勧めします。

  1. parse_url関数を使用してURLを解析し、クエリ文字列を抽出します。
  2. 上記の手順からクエリ文字列を取得し、 parse_str関数を呼び出して、個別のクエリパラメータを変数に取得します。
于 2012-08-29T19:42:49.227 に答える