正则表达式:从URL中剥离Youtube视频的ID

时间:2012-07-20 06:36:48

标签: regex youtube

我目前正在使用正则表达式代码来分隔YT视频ID。我使用正则表达式的原因是,视频网址的格式有很多种。我已经构建了一个正则表达式,它几乎可以检测几乎所有YT url格式的ID,除了下面的那个。我试过修改但没有运气。有没有办法让Regex从下面的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 个答案:

答案 0 :(得分:3)

字符串操作怎么样?你会找到“v =”并开始读到下一个“&amp;” ?这将为您提供视频ID,您可以稍后轻松创建URL

答案 1 :(得分:0)

以下内容应该有效:

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

&?开始,然后是id,然后是下一个&或结尾。

我不太了解PHP,但我可以看到你正在尝试替换字符串。这不应该完全奏效。我认为你应该做的是获得以下匹配并将其添加到字符串中以构建自己的URL。

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

然后$ res将是想要的网址。

答案 2 :(得分: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

最初在this post之前找到了这个功能。

答案 3 :(得分:-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;

它基本上总是以v = ....

开头