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

How to get video id from vimeo url/embed?

所以我正在尝试使用正则表达式从 vimeo url 获取视频 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/am 中的正则表达式有区别吗?我误用了 preg_match?我在 Stack Overflow 上看了一段时间,只是找不到一个有效的正则表达式来从 vimeo url/embed.

获取视频 ID

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

您的代码似乎没有任何错误。您是否用 print_r($videoLink)print_r($id) 检查了输入和输出变量 $videoLink$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];
}

(...)? 包装它使其成为可选的,而 ?: 将其从结果中排除。

如果你使用来自 Vimeo 的短 URL,试试这个:

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

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

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

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

此外,他们不可能收集所有 url。例如 Vimeo 允许自定义视频 url,它不包含 id。模式(当前)如下:

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