yaleksandr89
@yaleksandr89
PHP developer

Как подправить регулярку?

Здравствуйте.

Нужно из ссылки на видео в youtube выдирать ID видео. Написал такую v=(.*)&.

Регулярка работает для ссылок вида: https://www.youtube.com/watch?v=ID_VIDEO&feature=e... (находит ID_VIDEO), но вот для такого формата: https://www.youtube.com/watch?v=ID_VIDEO - не работает, так как нет амперсанд.

Помогите подправить регулярку.

UPD: Сделал такой вариант: v=([a-zA-Z0-9_-]*)
  • Вопрос задан
  • 172 просмотра
Решения вопроса 2
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
videoId всегда содержит 11 символов и всегда будет заканчиваться одним из следующих символов:
A, E, I, M, Q, U, Y, c, g, k, o, s, w, 0, 4, 8

Таким образом, регулярное выражение (RegEx) для videoId будет выглядеть следующим образом:
[\w-]{10}[AEIMQUYcgkosw048]{1}

И так как вариантов ссылок на видеоролик может быть много, то не всегда подойдёт парсинг URL (parse_url, parse_str итп), поэтому лучше использовать регулярное выражение в этом случае

function getVideoID ($url)
{
	preg_match("%^(?:https?://)?(?:www\.|m\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com(?:/watch\?v=|/watch/\?v=|/embed/|/v/))([\w-]{10}[048AEIMQUYcgkosw]{1})($|\S+).*$%x", $url, $matches);
	return $matches[1] ?? "";
}

echo getVideoID("https://youtu.be/DBXH9jJRaDk?t=11");
//DBXH9jJRaDk

echo getVideoID("https://www.youtube.com/embed/DBXH9jJRaDk");
//DBXH9jJRaDk

echo getVideoID("https://www.youtube.com/watch?v=DBXH9jJRaDk&t=30&feature=emb_logo");
//DBXH9jJRaDk

echo getVideoID("https://www.youtube.com/watch?v=DBXH9jJRaDk");
//DBXH9jJRaDk

echo getVideoID("https://m.youtube.com/watch?v=DBXH9jJRaDk&t=30");
//DBXH9jJRaDk
Ответ написан
@dzhebrak
Так можно:
preg_match('/\?v=([a-zA-Z0-9_\-]+)/', $url, $matches);
print_r($matches[1]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы