2012-08-29 22 views

回答

0

尝试这种情况:

if(preg_match('/youtube\.com\/(v\/|watch\?v=)([\w\-]+)/', $url, $match)){; $vid=$match[2]; 
} 
print "$vid"; 
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

+0

这是我正在使用的确切的一个,但唯一的问题是它不适用于feature = endscreen YouTube URL。所有其他似乎正在正常工作。 – user1634119

+0

我有修改我的答案请看看。我相信这对你非常有帮助。 –

0

而不是试图一个复​​杂的正则表达式,我建议这样的:

  1. 使用parse_url function解析URL并提取查询字符串。
  2. 从上面的步骤取查询字符串并调用parse_str function以获取单独的查询参数到变量中。