2010-02-08 18 views
6

En un sistema que estoy desarrollando tengo que reconocer el link de youtube en el siguiente formatoexp Reg para el enlace de youtube

[youtube] URL de YouTube [/ youtube]

para el momento en que llegué a esta expresión regular:

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

Pero este patrón no es capaz de reconocer URL como

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

Nota la feature = FVST.

¿Alguno me puede ayudar a reconocer todas las posibles url de youtube?

+1

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

Respuesta

4

¿Qué tal

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

EDITAR: Se ha cambiado la expresión regular para mantener sólo el ID de vídeo dentro de paréntesis.

+0

Si dos "youtube-links" están en la misma línea, el codicioso '. *' arruinará las cosas. Puse un '' 'reacio después de eso, como Andy sugirió (** editar: ** que ahora ha borrado su respuesta ...). –

+0

Oh sí, claro. Lo vi a tiempo, sin embargo :) –

+0

No Tim, fallaste: vi que tenías un '. *' Sin un '?'! Culpable como acusado! :) +1 –

1

Notas:
Me Realizar una comparación entre mayúsculas y minúsculas en la URL (/ i)
. coincide con cualquier cosa; utilizar \. en su lugar, para que coincida con la URL
Además, "www." en las URL de Youtube es opcional.
Uso (\. [Az] +) {1,2} en lugar de "*" para que coincida con ".com", ".es", .. después de "youtube"

Suponiendo que el "& función" parte es opcional, la expresión regular sería:

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

Suponiendo que el '& función' parte es opcional, y no puede haber otros parámetros que 'característica':

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