Подтвердить что ты не робот

Регулярное выражение для ссылок на YouTube

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

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

Ответ 6

В последнее время у меня возникают проблемы с 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] ;

Ответ 7

Piggy, поддерживающий Fanmade, охватывает следующие ссылки, включая кодировку url_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

Ответ 8

Я работаю с такими ссылками:

http://www.youtube.com/v/M-faNJWc9T0?fs=1&rel=0

И здесь regEx, который я использую, чтобы получить ID от него:

"(.+?)(\/v/)([a-zA-Z0-9_-]{11})+"

Ответ 9

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

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

Ответ 10

вот полное решение для получения идентификатора видео 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;
}

Ответ 11

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

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

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

Ответ 12

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

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