Поэтому я пытаюсь получить идентификатор видео из URL Vimeo с помощью регулярных выражений.
Основываясь на этом: Получить идентификатор видео с URL Vimeo
Следующее регулярное выражение должно сделать трюк:
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.
Для этого есть множество регулярных выражений, но никто не показывает их реализацию.
Ваш код не содержит ошибок. Вы проверили входные и выходные переменные $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];
}
Заворачивая это с (...)?
делает это необязательным и ?:
исключает это из результата.
Единственный ответ, который всегда будет правильным, — спросить Vimeo. Vimeo-х oEmbed Конечная точка поддерживает каждый URL Vimeo и возвращает идентификатор видео.
Конечная точка oEmbed обновляется по мере развития сайта и добавления дополнительного контента, но эти регулярные выражения устаревают.
Кроме того, они не могут собрать все URL-адреса. Например, Vimeo позволяет использовать собственный URL-адрес видео, который не будет содержать идентификатор. Шаблон (в настоящее время) выглядит следующим образом:
https://vimeo.com/{user_url}/{video_url}
Попробуйте это, если вы используете короткие URL-адреса из Vimeo:
$videoLink = 'http://vimeo.com/11111111'; // example
if (preg_match('#https?://vimeo.com/([0-9]+)#i', $videoLink, $match)) {
$videoId = $match[1];
}