2010-02-08 3 views
6

Dans un système que je développe, je dois reconnaître le lien youtube dans le format suivantReg exp pour le lien youtube

[youtube] youtube URL [/ youtube]

pour la moment où je suis arrivé à cette expression régulière:

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

Mais ce modèle ne peut pas reconnaître comme url

[youtube] http://www.youtube.com/watch?v=s3wXkv1VW54&feature=fvst[/youtube]

Notez la fonction = FVST.

Quelqu'un peut-il m'aider à reconnaître toutes les URL youtube possibles?

+1

connexes: http: // stackover flow.com/questions/1658763/php-regex-youtube, http://stackoverflow.com/questions/1773822/get-youtube-video-id-from-html-code-with-php - voir http: // stackoverflow .com/search? q = youtube + regex – Gordon

Répondre

4

Que diriez-vous

|\[youtube\]http://www.youtube\.(.*?)/watch\?v=([a-zA-Z0-9_-]*)[%&=#a-zA-Z0-9_-]*\[\/youtube\]|s 

EDIT: Changé la regex pour ne garder que l'ID vidéo entre parenthèses.

+0

Si deux "youtube-links" sont sur la même ligne, le '. *' gourmand va gâcher les choses. Je mettrais un '?' Réticent après, comme Andy l'a suggéré (** edit: ** qui a maintenant supprimé sa réponse ...). –

+0

Oh oui, c'est ça. Je l'ai vu à temps, cependant :) –

+0

Non Tim, vous avez échoué: je vous ai vu avoir un '. *' Sans un '?'! Coupable comme chargé! :) +1 –

1

Notes:
J'EFFECTUER un match insensible à la casse sur les URL (/ i)
. correspond à n'importe quoi; utilisation \. au lieu de correspondre à l'URL
Aussi, "www." dans les URL Youtube est facultatif.
Utilisation (\. [Az] +) {1,2} au lieu de "*" correspondre ".com", ".co.uk", .. après "youtube"

En supposant que le "& fonction » partie est facultative, l'expression rationnelle serait:

/\[youtube\]http:\/\/(www\.)?youtube(\.[a-z]+){1,2}\/watch\?v=([a-z0-9_-]*)(&feature=([a-z]+))?\[\/youtube\]/is

En supposant que la « & fonction » partie est facultative, et il peut y avoir d'autres paramètres que « fonction »:

/\[youtube\]http:\/\/(www\.)?youtube(\.[a-z]+){1,2}\/watch\?v=([a-z0-9_-]*)(&([a-z]+)=([a-z0-9_-])+)*?\[\/youtube\]/is 
Questions connexes