Foros del Web » Programación para mayores de 30 ;) » RegExp »

[SOLUCIONADO] RegExp para vídeos de youtube y links en general

Estas en el tema de RegExp para vídeos de youtube y links en general en el foro de RegExp en Foros del Web. Hola. Estoy modificando una web en la que los usuarios dejan comentarios, como un foro. Los usuarios pueden poner enlaces de cualquier página web y ...
  #1 (permalink)  
Antiguo 17/12/2015, 14:23
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
RegExp para vídeos de youtube y links en general

Hola. Estoy modificando una web en la que los usuarios dejan comentarios, como un foro. Los usuarios pueden poner enlaces de cualquier página web y mediante una expresión regular y preg_replace de php se muestran como links:

Código PHP:
Ver original
  1. <?php
  2.     $str_return = preg_replace("/((http:\/\/|https:\/\/)[^\s]+)/i", '<a target="_blank" rel="nofollow" href="$1">$0</a>', $str_return);
  3. ?>

Lo que me han pedido es que los enlaces que sean de youtube se muestren como vídeo embebido. Después de buscar un rato he encontrado esta expresión regular:

Código PHP:
Ver original
  1. <?php
  2.     $pattern = '#https?://(?:www\.)?youtube\.com/watch\?v=([0-9a-z-A-Z-]+)#i';
  3.     $replacement = '<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>';     
  4.     $str_return = preg_replace($pattern, $replacement, $str_return, 1);
  5. ?>

Pero tengo un problema bastante obvio, cuando se encuentra un link a youtube encaja en las dos expresiones regulares y el src del iframe se modifica, por lo que deja de ser funcional. No sé exactamente como modificar una de las dos expresiones regulares para que los links a cualquier página web entren en la primera expresión regular, menos los de youtube, que deben entrar en la segunda.

Alguna idea? Gracias.
  #2 (permalink)  
Antiguo 17/12/2015, 14:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: RegExp para vídeos de youtube y links en general

Lo ideal sería que uses preg_replace_callback() y en dicho callback analices parte de la URL para devolver un resultado apropiado.

Usar un replace únicamente basado en texto es además de complejo, poco escalable y nada claro.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/12/2015, 18:43
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: RegExp para vídeos de youtube y links en general

Fantástico!! No sabía que existía esa función. Gracias!

Funciona perfectamente, pero me queda una tarea. Si bien hay que mostrar todas las URL como enlaces, sólo se debe mostrar la primera URL de youtube encontrada como vídeo embebido y el resto, si hay más, simplemente como enlaces (son especificaciones, supongo que será por si alguien pone una lista larga de links de youtube el post no se haga demasiado largo). Esto lo tenía resuelto con el parámetro 'limit' de preg_replace y existe otro similar para preg_replace_callback, pero no puedo usarlo porque eso sólo limitaría la primera URL que encontrase, no la primera que fuera de youtube. ¿Sabes como hacer esto?
  #4 (permalink)  
Antiguo 17/12/2015, 22:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: RegExp para vídeos de youtube y links en general

Claro, puedes usar la expresión use() para arrastrar ciertas variables dentro del contexto de la función, así podrías llevar una cuenta o algo parecido.

Código PHP:
Ver original
  1. $x = 0;
  2.  
  3. $s = preg_replace_callback('/x/', function($m) use (&$x) {
  4.   if ($x < 3) {
  5.    // OK
  6.   }
  7.  
  8.   $x += 1;
  9. });
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/12/2015, 05:17
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: RegExp para vídeos de youtube y links en general

Genial! Funciona perfectamente.

Muchísimas gracias amigo!

Etiquetas: expresion, regular, youtube
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:32.