web-dev-qa-db-fra.com

Expression régulière pour les liens youtube

Quelqu'un a-t-il une expression régulière qui obtient un lien vers une vidéo Youtube (objet non incorporé) de (presque) toutes les manières possibles de créer un lien vers Youtube?

Je pense que c'est un problème assez commun et je suis sûr qu'il y a beaucoup de façons de le lier.

Un point de départ serait:

31
jrom

Jusqu'ici, j'ai eu ce Regular expression qui fonctionne pour les exemples que j'ai posté, et il obtient l'ID du premier groupe:

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

Vous pouvez utiliser cette expression ci-dessous.

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

Je l'utilise, et il couvre les URL les plus utilisées . Je vais continuer à le mettre à jour sur This Gist . Vous pouvez le tester sur cet outil .

11
brunodles

J'ai amélioré les liens affichés ci-dessus avec un ami pour un script que j'ai écrit pour IRC afin de reconnaître même les liens sans http. Cela a fonctionné sur tous les tests de stress que j'ai obtenus jusqu'à présent, y compris le texte tronqué avec des URL youtube à peine reconnaissables, alors voici:

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

Je teste toutes les expressions rationnelles présentées ici et aucune ne peut couvrir tous les types d'URL utilisés par mon client.

J’ai construit cela à peu près par essais et erreurs, mais cela semble fonctionner avec tous les modèles publiés par Poppy Deejay.

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

Peut-être que cela aide quelqu'un qui se trouve dans une situation similaire à celle que j'avais aujourd'hui;)

3
Fanmade

J'ai eu des problèmes récemment avec les URL atttribution_link donc j'ai essayé de créer ma propre regex qui fonctionne aussi pour ceux-là.

Voici ma chaîne de regex:

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

et voici quelques cas de test que j'ai essayés:

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

Rappelez-vous également de vérifier la chaîne que vous obtenez pour l'URL de votre vidéo. Parfois, il peut contenir le pourcentage de caractères. Si c'est le cas

url = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

et ça devrait le réparer.

Rappelez-vous également que l’index de la clé youtube est maintenant l’index 9.

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

Ce serait le plus long RegEx du monde si vous parveniez à couvrir tous les formats de lien, mais en voici un pour commencer qui couvre les deux premiers formats de lien:

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

Le second groupe correspondra à l'ID de la vidéo si vous avez besoin de le sortir.

2
TimS

Piggy backing sur Fanmade , cela couvre les liens ci-dessous, y compris la version encodée en URL d’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
1
ProGirlXOXO

Je travaille avec ce genre de liens:

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

Et voici le regEx que j'utilise pour obtenir un identifiant:

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

Cette expression rationnelle résoud mon problème, je peux obtenir un lien youtube avec un lien de surveillance, d'intégration ou partagé

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

Vous pouvez vérifier ici https://regex101.com/r/Kvk0nB/1

0
Akash Jain

Ceci itère sur les réponses existantes et gère mieux les cas Edge. (par exemple http://thisisnotyoutu.be/thing )

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

voici la solution complète pour obtenir la vidéo youtube id pour Java ou Android, je n’ai trouvé aucun lien qui ne fonctionne pas avec cette fonction

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
user3475539