来自嵌入代码的YouTube Vimeo视频ID或来自带有PHP正则表达式RegEx的URL

时间:2011-02-23 06:21:49

标签: php regex youtube vimeo

我希望通过其嵌入代码或网址获取YouTube或Vimeo的视频ID,使用PHP执行此操作的任何解决方案?

4 个答案:

答案 0 :(得分:20)

您可以使用preg_match来获取ID。我将在本答案的后面部分介绍表达式,但这里是如何使用preg_match的基本思路:

preg_match('expression(video_id)', "http://www.your.url.here", $matches);
$video_id = $matches[1];

以下是您询问的每种可能输入的表达式细分。我为每个显示了一些测试用例和结果的链接。

  1. 对于 YouTube网址,例如http://www.youtube.com/watch?v=89OpN_277yY,您可以使用this表达式:

    v=(.{11})
    
  2. YouTube嵌入代码可能看起来像这样(一些无关紧要的东西被剪掉):

    <object width="640" height="390">
        <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=...
        ...
    </object>
    

    或者像这样:

    <iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe>
    

    因此从任一样式获取ID的表达式为this

    \/v\/(.{11})|\/embed\/(.{11})
    
  3. 据我所知,
  4. Vimeo网址看起来像http://vimeo.com/<integer>。我找到的最低值只是http://vimeo.com/2,我不知道是否有上限,但我现在假设它限制在10位数。如果他们知道细节,希望有人可以纠正我。可以使用This表达式:

    vimeo\.com\/([0-9]{1,10})
    
  5. Vimeo嵌入代码采用以下形式:

    <iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
    

    所以你可以使用this表达式:

    player\.vimeo\.com\/video\/([0-9]{1,10})
    

    或者,如果数字的长度最终可能超过10,您可以使用:

    player\.vimeo\.com\/video/([0-9]*)"
    

    请注意,如果您将表达式用双引号括起来,"将需要使用\进行转义。


  6. 总结,我不确定您希望如何实现此功能,但您可以将所有表达式与|结合使用,也可以单独匹配每个表达式。如果您希望我提供有关如何组合表达式的更多详细信息,请在此答案中添加注释。

答案 1 :(得分:2)

这里有另一个类似的[仅适用于youtube],可能有用看看。 PHP Regex to get youtube video ID?

答案 2 :(得分:1)

还有一个问题有很多很好的答案,特别是来自@user2200660。

https://stackoverflow.com/a/16841070/3850405

我更喜欢使用既可以处理嵌入代码也可以处理当前使用的任何 URL 的正则表达式。

http://vimeo.com/423630
https://vimeo.com/1399176
http://vimeo.com/423630087
https://vimeo.com/423630087
https://player.vimeo.com/video/423630087
https://player.vimeo.com/video/423630087?title=0&byline=0&portrait=0
https://vimeo.com/channels/staffpicks/423630087
https://vimeo.com/showcase/7008490/video/407943692

可以处理我遇到的所有 URL 的正则表达式:

(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*

https://regex101.com/r/p2Kldc/1/

$vimeo = 'http://player.vimeo.com/video/67019023';

if(preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*/", $vimeo, $output_array)) {
    echo "Vimeo ID: $output_array[6]";
}

感谢@zeckdude 提供的 PHP 原始示例代码。

https://stackoverflow.com/a/29860052/3850405

JavaScript 版本:

https://stackoverflow.com/a/65846269/3850405

答案 3 :(得分:0)

根据最新的youtube标准,您可以使用以下代码从嵌入代码中提取视频ID。

$embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>';
preg_match('~embed/(.*?)"~', $embed, $output);
echo $output[1];

谢谢