如何从vimeo url / embed获取视频ID?

时间:2015-01-04 02:12:27

标签: javascript php regex video vimeo

所以我试图使用正则表达式从vimeo网址获取视频ID。

基于此:Get video id from Vimeo url

以下正则表达式可以解决这个问题:

if (preg_match("/https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/", $videoLink, $id)) {
        $videoId = $id[3];
    }

但它不起作用,我不能为我的生活解决原因。

Javascript和PHP中的正则表达式是否存在差异?我是否误用了preg_match?我已经在Stack Overflow上查看了一段时间,但却找不到可以从vimeo url / embed获取视频ID的正则表达式。

有很多正则表达式,但没有显示它们的实现。

3 个答案:

答案 0 :(得分:4)

您的代码似乎不包含任何错误。您是否使用$videoLink$id检查了输入和输出变量print_r($videoLink)print_r($id)?也许这会给你一个建议。

这是一个使用您的代码的工作示例:

$videoLink = 'https://vimeo.com/channels/mychannel/11111111';

if (preg_match("/https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/", $videoLink, $id)) {
    $videoId = $id[3];
}

print_r($id); // the array
print_r($videoId); // 11111111

如果print_r()无效:如果显示错误,您是否收到任何错误?

修改

如果您希望http(s)://是可选的,可以使用以下代码:

if (preg_match("/(?:https?:\/\/)?(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/", $videoLink, $id)) {
    $videoId = $id[3];
}

使用(...)?对其进行换行使其成为可选项,?:将其从结果中排除。

答案 1 :(得分:3)

永远正确的唯一答案就是问Vimeo。 Vimeo的oEmbed端点支持每个Vimeo URL,并返回视频ID。

oEmbed端点随着网站的发展而保持最新并添加更多内容,但这些正则表达式将会过时。

此外,他们无法收集所有网址。例如,Vimeo允许自定义视频网址,该网址不包含ID。模式(当前)如下:

https://vimeo.com/{user_url}/{video_url}

答案 2 :(得分:1)

如果您使用Vimeo中的短网址,请尝试使用此网址:

$videoLink = 'http://vimeo.com/11111111'; // example

if (preg_match('#https?://vimeo.com/([0-9]+)#i', $videoLink, $match)) {
    $videoId = $match[1];
}