所以我试图使用正则表达式从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的正则表达式。
有很多正则表达式,但没有显示它们的实现。
答案 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];
}