Получить идентификатор видео Youtube из html-кода с помощью PHP

Я хочу получить только ID видео youtube из html-кода

посмотрите (или несколько) код объекта / встраивания для youtube video

// html из базы данных

<p>loremm ipsum dolor sit amet enot <a href="link" attribute=""blah blah blah">anchor link</a> </p> <object width="425" height="344"> <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param> <param name="allowFullScreen" value="true"></param> <param name="allowscriptaccess" value="always"></param> <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"> </embed> </object> <image src="path/to/image.ext" > <p>lorem ipsum dolor sit amet... blah</p> <p>lorem ipsum dolor sit amet... blah</p> <object width="425" height="344"> <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param> <param name="allowFullScreen" value="true"></param> <param name="allowscriptaccess" value="always"></param> <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"> </embed> </object> <p>blah</p> blah<br/> blah<br/> blah<br/> 

Бледно украден из плагина youtube htmlpurifier:

 preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches); var_dump($matches[1]); 

Обычно есть два формата видеороликов YouTube:

 http://www.youtube.com/v/[videoid] http://www.youtube.com/watch?v=[videoid] 

«Www.youtube.com» можно заменить «www.youtube.co.uk» или другими кодами стран, но, насколько я смог определить, идентификаторы видео одинаковы независимо от имени домена ,

Идентификатор видео – это 11-символьная строка, которая использует кодировку base-64.

Предполагая, что у вас есть код, который будет анализировать URL-адреса из HTML-документа, вы можете определить, является ли он URL-адресом YouTube и получить идентификатор видео с помощью этого регулярного выражения (написанного на C #, но его нужно легко преобразовать в php или что-то еще):

 "^http://(?<domain>([^./]+\\.)*youtube\\.com)(/v/|/watch\\?v=)(?<videoId>[A-Za-z0-9_-]{11})" 

Это особое регулярное выражение относится к youtube.com. Понимая, что все разные коды стран (youtube.co.uk, youtube.pl, youtube.it и т. Д.) Несколько более активны.

На самом деле, чтобы полностью захватить все опции, я обнаружил, что решение WebFlakeStudio является лучшим, со следующим дополнением, чтобы захватить все 3 формы * глупости клиента * cough * cough *

(PHP)

 preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches); if(isset($matches[2]) && $matches[2] != ''){ $YoutubeCode = $matches[2]; } 

Я добавил / embed, это должно захватить все. Объект, URL-адрес и вкладка.

Если вы хотите установить ссылку для видео youtube, вы можете использовать следующий фрагмент кода:

 $youtubeRegexp = "#(/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#"; $embedUrl = preg_replace($youtubeRegexp, '/embed/$2', $videoUrl); 

В настоящий момент код вставки:

 <iframe width="{width}" height="{height}" src="{embed_url}" frameborder="0" allowfullscreen></iframe> 

Примечание: $ videoUrl должен быть установлен на исходный url перед запуском этого выражения.

Я мог бы ругать за использование регулярного выражения для анализа html, но, учитывая обстоятельства, возможно, это лучший способ сделать это?

 preg_match('~/v/([0-9a-z_]+)~i', $code, $matches); echo $matches[1]; 

если допустимыми символами для идентификатора видео youtube являются 0-9a-z_