如何从 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}
所以我正在尝试使用正则表达式从 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.
那里有很多正则表达式,但没有显示它们的实现。
您的代码似乎没有任何错误。您是否用 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}