【问题标题】:How to get video id from vimeo url/embed?如何从 vimeo url/embed 获取视频 ID?
【发布时间】:2015-03-01 22:30:27
【问题描述】:

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

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

【问题讨论】:

  • 您的正则表达式在大部分情况下都有效(除了没有捕获 param=test),不确定问题是什么?
  • @l'L'l 当我为任何 vimeo url 运行上面的代码时,它永远不会匹配。它总是以失败的形式返回。我是否正确实施它?
  • $videoLink 的确切值是多少?我使用前面示例中显示的所有 url 尝试了您的代码,它捕获了11111111。来看看吧:ideone.com/uTIhu4
  • @l'L'l 我发现了这个问题,并用它回复了 Alex 的回答。
  • 正则表达式仍应使用该格式;看看我链接的例子。

标签: javascript php regex video vimeo


【解决方案1】:

您的代码似乎没有任何错误。您检查输入和输出变量$videoLink$idprint_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];
}

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

【讨论】:

  • 我想我找到了问题所在。就我而言,视频的格式为vimeo.com/11111111。我将如何修改正则表达式以在所有情况下都允许这样做,而不是在开头使用 http/https 位?
【解决方案2】:

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

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

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

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

【讨论】:

  • 为什么这被否决了?这可能不是问题的直接答案,但它是一个非常有效的观点。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2011-03-28
    相关资源
    最近更新 更多