2010-09-15 2 views
29

У кого-то есть регулярное выражение, которое получает ссылку на видео Youtube (не внедренный объект) из (почти) всех возможных способов связи с Youtube?Регулярное выражение для ссылок на youtube

Я думаю, что это довольно распространенная проблема, и я уверен, что есть много способов связать это.

Отправной точкой будет:

+0

Вы забыли "https://www.youtube.com/embed/UIpuNuV23v0"? – Vishwajeet

ответ

42

До сих пор я получил эту Regular expression работает на примерах, которые я отвечал, и он получает идентификатор на первой группе:

http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)? 
+1

Мне нравится, что он соответствует коротким ссылкам! – Sonny

+2

Я изменил подтип идентификатора, чтобы потребовать один или несколько символов, и включить символ тире: '([\ w \ -] +)' – Sonny

+0

@Sonny, какая часть регулярного выражения выше является под-образцом идентификатора? – zakdances

2

Это был бы самый длинный RegEx в мире, если вам удалось охватить все форматы ссылок, но вот один, чтобы вы начали, который будет охватывать первые несколько форматов ссылок:

http://(www\.)?youtube\.com/watch\?.*v=([a-zA-Z0-9]+).* 

вторая группа будет соответствовать идентификатору видео, если вам нужно это выяснить.

+0

Идентификатор youtube может содержать тире ('-'), который выше не предсказывает – snachmsm

+0

Он также может содержать символы подчеркивания – Lawrr

5

Я улучшил ссылки, выложенные выше, с другом для сценария, который я написал для IRC, чтобы распознать даже ссылки без http. Он работал на всех стресс-тестах, которые я получил до сих пор, в том числе искаженного текста с едва узнаваемым URLs YouTube, так вот она:

~(?:https?://)?(?:www\.)?youtu(?:be\.com/watch\?(?:.*?&(?:amp;)?)?v=|\.be/)([\w\-]+)(?:&(?:amp;)?[\w\?=]*)?~ 
+0

Не работает в php: 'Warning: preg_match(): Неизвестный модификатор '/' in ...' –

0

Это итерация на существующих ответы и обрабатывает крайние случаи лучше. (Например http://thisisnotyoutu.be/thing)

/(?:https?:\/\/|www\.|m\.|^)youtu(?:be\.com\/watch\?(?:.*?&(?:amp;)?)?v=|\.be\/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/ 
2

У меня возникли проблемы в последнее время с atttribution_link URLs, так что я пытался сделать свое собственное регулярное выражение, которое работает для тех, кто тоже.

Вот мое регулярное выражение строка:

(https?://)?(www\\.)?(yotu\\.be/|youtube\\.com/)?((.+/)?(watch(\\?v=|.+&v=))?(v=)?)([\\w_-]{11})(&.+)? 

и вот несколько тестов я пробовал:

http://www.youtube.com/watch?v=iwGFalTRHDA 
https://www.youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related 
http://youtu.be/iwGFalTRHDA 
http://www.youtube.com/embed/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/embed/watch?v=iwGFalTRHDA 
http://www.youtube.com/embed/v=iwGFalTRHDA 
http://www.youtube.com/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA 
www.youtube.com/watch?v=iwGFalTRHDA 
www.youtu.be/iwGFalTRHDA 
youtu.be/iwGFalTRHDA 
youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch/iwGFalTRHDA 
http://www.youtube.com/v/iwGFalTRHDA 
http://www.youtube.com/v/i_GFalTRHDA 
http://www.youtube.com/watch?v=i-GFalTRHDA&feature=related 
http://www.youtube.com/attribution_link?u=/watch?v=aGmiw_rrNxk&feature=share&a=9QlmP1yvjcllp0h3l0NwuA 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=qYr8opTPSaQ&feature=em-uploademail 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=qYr8opTPSaQ 

Также не забудьте проверить строку, которую вы получите для URL видео, иногда это может получить процент символов.Если так, просто сделайте это

url = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

и он должен исправить это.

Помните также, что индекс ключа YouTube теперь индекс 9.

NSRange youtubeKey = [result rangeAtIndex:9]; //the youtube key 
NSString * strKey = [url substringWithRange:youtubeKey] ; 
2

Я testet все регулярные выражения, которые показаны здесь, и никто не мог охватить все типы URL-адрес, что мой клиент, используя.

Я построил это в значительной степени через пробную версию и ошибку, но, похоже, работает со всеми шаблонами, которые опубликовал Poppy Deejay.

"(?:.+?)?(?:\/v\/|watch\/|\?v=|\&v=|youtu\.be\/|\/v=|^youtu\.be\/)([a-zA-Z0-9_-]{11})+" 

Может быть, это поможет кому-то, кто находится в подобной ситуации, что у меня был сегодня;)

9

Вы можете использовать это выражение ниже.

(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([\w\-_]+)\&? 

Я использую его, и он охватывает наиболее используемые URL-адреса. Я буду обновлять его на This Gist. Вы можете проверить его на этом tool.

+0

Ссылка на * этот gist * больше не работает. Используйте https://gist.github.com/927fd8feaaccdbb9d02b (только идентификатор сущности, он перенаправит вас) – Sorashi

1

Piggy подкладки на Fanmade, это охватывает ссылки ниже, включая URL-адрес закодированные версии attribution_links:

(?:.+?)?(?:\/v\/|watch\/|\?v=|\&v=|youtu\.be\/|\/v=|^youtu\.be\/|watch\%3Fv\%3D)([a-zA-Z0-9_-]{11})+ 



https://www.youtube.com/attribution_link?a=tolCzpA7CrY&u=%2Fwatch%3Fv%3DMoBL33GT9S8%26feature%3Dshare 
https://www.youtube.com/watch?v=MoBL33GT9S8&feature=share 
http://www.youtube.com/watch?v=iwGFalTRHDA 
https://www.youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related 
http://youtu.be/iwGFalTRHDA 
http://www.youtube.com/embed/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/embed/watch?v=iwGFalTRHDA 
http://www.youtube.com/embed/v=iwGFalTRHDA 
http://www.youtube.com/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA 
www.youtube.com/watch?v=iwGFalTRHDA 
www.youtu.be/iwGFalTRHDA 
youtu.be/iwGFalTRHDA 
youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch/iwGFalTRHDA 
http://www.youtube.com/v/iwGFalTRHDA 
http://www.youtube.com/v/i_GFalTRHDA 
http://www.youtube.com/watch?v=i-GFalTRHDA&feature=related 
http://www.youtube.com/attribution_link?u=/watch?v=aGmiw_rrNxk&feature=share&a=9QlmP1yvjcllp0h3l0NwuA 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=qYr8opTPSaQ&feature=em-uploademail 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=qYr8opTPSaQ 
+0

Привет всем, это самое правильное/комплексное решение. (2017/March) – smallufo

+0

У него все еще есть некоторые недостатки: он совпадает с началом строки, например, если строка 'OOXX http: // www.youtube.com/v/iwGFalTRHDA', часть' OOXX' будет соответствует. – smallufo

+0

К сожалению, он не может обрабатывать список, например: https: //www.youtube.com/watch? V = qrO4YZeyl0I & index = 2 & list = PL5F47FAD7E4D6276E', он может захватить значение 'v', но не может соответствовать всему URL-адресу. – smallufo

0

здесь является полным решением для получения ID видео YouTube для Java или Android, я не нашел ни одного ссылка, которая не работает с этой функцией

public static String getValidYoutubeVideoId(String youtubeUrl) 
{ 
    if(youtubeUrl == null || youtubeUrl.trim().contentEquals("")) 
    { 
     return ""; 
    } 
    youtubeUrl = youtubeUrl.trim(); 
    String validYoutubeVideoId = ""; 
    String regexPattern = "^(?:https?:\\/\\/)?(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube\\.com\\S*[^\\w\\-\\s])([\\w\\-]{11})(?=[^\\w\\-]|$)(?![?=&+%\\w]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w]*"; 
    Pattern regexCompiled = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE); 
    Matcher regexMatcher = regexCompiled.matcher(youtubeUrl); 
    if(regexMatcher.find()) 
    { 
     try 
     { 
      validYoutubeVideoId = regexMatcher.group(1); 
     } 
     catch(Exception ex) 
     { 
     } 
    } 
    return validYoutubeVideoId; 
} 
0

Это регулярное выражение решить мою проблему, я могу получить ссылку имея юность часы, вставлять или разделяемую ссылку

(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+) 

Вы можете проверить здесь https://regex101.com/r/Kvk0nB/1

Смежные вопросы