Я реализовал функцию для захвата Youtube ID, и я использую регулярное выражение:
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:(?:v|e(?:mbed)?)/|.*[?&]v=|[^/]+/.+/)|youtu\.be/)([^"&?/ ]{11})%i', $sourceCode, $youtube))
Моя проблема заключается в том, что это выражение resular не захватывает идентификатор из URL-адреса, например: http://img.youtube.com/vi/Di9mW35zprs/0.jpg
Итак, как я могу изменить его для работы, поскольку он работает прямо сейчас, но, предоставив мне "Di9mQ35zprs" из URL-адреса " http://img.youtube.com/vi/Di9mW35zprs/0.jpg " тоже?
Все, что я хочу достичь, это заменить мой текущий preg_match и включить его для захвата идентификатора youtube с URL-адресов http://img.youtube.com/vi/Di9mW35zprs/0.jpg.
Спасибо!
Используйте parse_url() и взорваться() первым. Теперь ваше регулярное выражение выглядит так, как будто оно исходило из ада.
попробуйте использовать это:
$videoId = preg_replace("/.*v[=i]\/?(\w+).*/", '\1', "http://img.youtube.com/vi/Di9mQ35zprs/0.jpg");
Функция вернет вам нужный идентификатор. Он должен работать с обоими типами URL, которые вы описали.
$videoId = preg_replace("/.*v[=i]\/?(\w+).*/", '\1', "http://img.youtube.com/vi/Di9mQ35zprs/0.jpg"); echo $videoId; //outputs Di9mQ35zprs
и$videoId = preg_replace("/.*v[=i]\/?(\w+).*/", '\1', "https://www.youtube.com/watch?v=bhxXvEzVXXM"); echo $videoId; //outputs bhxXvEzVXXM