【问题标题】:using regex to separate local, youtube or vimeo video使用正则表达式分隔本地、youtube 或 vimeo 视频
【发布时间】:2012-06-01 21:19:44
【问题描述】:

我正在制作一个视频播放网站,我需要使用 html5 视频播放器来播放本地视频和 youtube api 和 vimeo api 来播放 vimeo 视频。问题是我想过滤用户输入的所有 3 个条件的链接。我尝试了一些正则表达式,因为我以前从未使用过它但没有成功。谁能帮我举个例子,展示如何分离这些链接以制作 3 个条件

  1. 从 youtube 链接中取出“youtube”一词,以便我可以做出条件声明

  2. 以同样的方式从本地视频中取出 .mp4 和 .ogg 扩展名,以便在 html5 视频播放器中播放

  3. 以同样的方式从 vimeo 链接中提取单词“vimeo”,以便我可以使用 vimeo api 播放 vimeo 视频。

谁能帮忙?

例如我们输入一个 youtube 链接

http://www.youtube.com/watch?v=example

那么如何从这个链接中取出“youtube”这个词呢?

我上传了一个带有文件名的本地视频

example.mp4

那我怎样才能从中得到扩展的 mp4?

【问题讨论】:

  • 请显示示例输入和输出。
  • 是的,我尝试了一个代码,但它给了我 youtube id,因为我是全新的 toregex,所以无法获得我想要的特定内容

标签: php regex


【解决方案1】:

这是改编自我之前写过的a php class

<?php

function identifyService ( $url )
{
    $url = preg_replace('#\#.*$#', '', trim($url));

    $services_regexp = array(
        "#^\w+\.(?P<format>[a-zA-Z0-9]{2,5})#"                     => 'local',
        '#vimeo\.com\/(?P<id>[0-9]*)[\/\?]?#i'                     => 'vimeo',
        '#youtube\.[a-z]{0,5}/.*[\?&]?v(?:\/|=)?(?P<id>[^&]*)#i'   => 'youtube'
    );

    foreach ( $services_regexp as $pattern => $service ) {
        if ( preg_match ( $pattern, $url, $matches ) ) {
            return ( $service === 'local' ) ? $matches['format']  : $service;
        }
    }

    return false;

}


$url = "foo.ogg";
// $url = "bar.mp4";
// $url = "http://www.youtube.com/watch?v=_rqR8_mOp_A";
// $url = "http://vimeo.com/39044814";
$service  = identifyService( $url );
var_dump( $service );


?>

希望对你有帮助。

【讨论】:

  • 如果您想检索其他信息,例如视频文件、作者、标题等,它可以与此类一起使用,但需要进行一些调整,因为服务 API 可能已更改。
  • 非常感谢您使用 youtube 和 vimeo 帮助我,是的,它解决了我 70% 的问题,但是如何处理本地视频。有没有办法从 example.mp4 之类的链接中获取扩展名并获得 """mp4 outta
  • 我编辑了我的答案以更具体地解决您的问题。如果是本地视频(比如“foo.mp4”或“bar.ogg”),它将返回文件扩展名,否则返回服务名称。
  • omg @Denis U 救了我一个不眠之夜。非常感谢我需要的确切帮助。真的很有用。嘿,您可以将我与您之前提供的其他网站的其余正则表达式代码链接起来,它可能对未来的项目有用。非常感谢
  • 检查我的答案的第一个链接。另外,如果你有兴趣学习正则表达式,这个问题可能会有用:stackoverflow.com/questions/4736/learning-regular-expressions
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2011-04-08
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
相关资源
最近更新 更多