Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自嵌入代码或带有PHP正则表达式RegEx的URL的YouTube Vimeo视频ID_Php_Regex_Youtube_Vimeo - Fatal编程技术网

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

来自嵌入代码或带有PHP正则表达式RegEx的URL的YouTube Vimeo视频ID,php,regex,youtube,vimeo,Php,Regex,Youtube,Vimeo,我想通过嵌入代码或URL获取YouTube或Vimeo的视频ID,有没有用PHP实现这一点的解决方案?您可以用来获取ID。我将在后面的回答中介绍表达式本身,但以下是如何使用preg_match的基本概念: preg_match('expression(video_id)', "http://www.your.url.here", $matches); $video_id = $matches[1]; 下面是您询问的每种可能输入类型的表达式明细。我为每个测试添加了一个链接,显示了一些测试用例和

我想通过嵌入代码或URL获取YouTube或Vimeo的视频ID,有没有用PHP实现这一点的解决方案?

您可以用来获取ID。我将在后面的回答中介绍表达式本身,但以下是如何使用preg_match的基本概念:

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

下面是您询问的每种可能输入类型的表达式明细。我为每个测试添加了一个链接,显示了一些测试用例和结果

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

    v=(.{11})
    
    player\.vimeo\.com\/video\/([0-9]{1,10})
    
  • YouTube嵌入代码可以如下所示(一些无关内容被剪裁):

  • Vimeo URL看起来像
    http://vimeo.com/
    ,据我所知。我找到的最低值只是
    http://vimeo.com/2
    ,我不知道是否有上限,但我现在假设上限是10位。希望有人能纠正我,如果他们知道的细节。可以使用以下表达式:

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

    <iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
    
    或者,如果数字的长度最终可能超过10,则可以使用:

    player\.vimeo\.com\/video/([0-9]*)"
    
    请记住,如果将表达式括在双引号中,则需要使用
    \
    进行转义



  • 总之,我不确定您想如何实现这一点,但您可以将所有表达式与
    |
    组合,也可以将每个表达式单独匹配。如果您希望我提供有关如何组合表达式的详细信息,请在此答案中添加注释。

    还有另一个类似的[仅适用于youtube]回答这里,可能是有用的看看。

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

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

    谢谢

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

    我更喜欢使用一个正则表达式,它既可以处理嵌入的代码,也可以处理当前使用的任何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})[?]?.*
    

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

    JavaScript版本:


    当我将这些正则表达式与preg\u match一起使用时,似乎没有得到任何匹配。我应该以某种方式修改它们还是正则表达式的风格不同?不要忘记/分隔符。例如,Vimeo使用:preg_match('/player\.Vimeo\.com\/video\/([0-9]{1,10})/',“your.url.here”,$matches)$video_id=$matches[1];
    $embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>';
    preg_match('~embed/(.*?)"~', $embed, $output);
    echo $output[1];
    
    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
    
    (https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*
    
    $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]";
    }