Регулярное выражение для ссылок на YouTube - PullRequest
31 голосов
/ 15 сентября 2010

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

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

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

Ответы [ 12 ]

48 голосов
/ 16 сентября 2010

Пока что я получил Regular expression, работающий для примеров, которые я разместил, и он получает идентификатор для первой группы:

http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)?
11 голосов
/ 30 июля 2015

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

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

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

5 голосов
/ 22 марта 2013

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

~(?:https?://)?(?:www\.)?youtu(?:be\.com/watch\?(?:.*?&(?:amp;)?)?v=|\.be/)([\w\-]+)(?:&(?:amp;)?[\w\?=]*)?~
3 голосов
/ 21 октября 2014

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

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

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

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

2 голосов
/ 21 февраля 2014

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

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

(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] ;
1 голос
/ 01 июля 2016

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

(?:.+?)?(?:\/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
1 голос
/ 15 сентября 2010

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

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

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

0 голосов
/ 12 апреля 2019

Это мой ответ для использования в Scala. Это полезно для извлечения 11 цифр из URL Youtube.

"https: // (? ([0-9a-Za-Z-] +?.):? Www.youtube.com/ | youtu.be \ S * [^ \ w- \ s] ) ([\ w -] {11}) (? = [^ \ w-] | $) (?! [? = & +% \ w] (?: [\ '"] [^ <> ] > |?)) [= & +% \ ш -] * "

def getVideoLinkWR: UserDefinedFunction = udf(f = (videoLink: String) => {
    val youtubeRgx = """https?://(?:[0-9a-zA-Z-]+\.)?(?:youtu\.be/|youtube\.com\S*[^\w\-\s])([\w \-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>|</a>))[?=&+%\w-./]*""".r
    videoLink match {
        case youtubeRgx(a) => s"$a".toString
        case _ => videoLink.toString
    }
}
0 голосов
/ 11 октября 2017

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

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

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

0 голосов
/ 19 сентября 2016

вот полное решение для получения идентификатора 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...