Tomemos estas URL como ejemplo:patrón de expresión para obtener el ID de vídeo de YouTube desde cualquier URL de YouTube
- http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
- http://www.youtube.com/watch?v=8GqqjVXhfMU
Esta función PHP no obtener correctamente el ID de caso 1, pero lo será en el caso 2. El caso 1 es muy común, donde CUALQUIERA puede aparecer detrás de la ID de YouTube.
/**
* get YouTube video ID from URL
*
* @param string $url
* @return string YouTube video id or FALSE if none found.
*/
function youtube_id_from_url($url) {
$pattern =
'%^# Match any YouTube URL
(?:https?://)? # Optional scheme. Either http or https
(?:www\.)? # Optional www subdomain
(?: # Group host alternatives
youtu\.be/ # Either youtu.be,
| youtube\.com # or youtube.com
(?: # Group path alternatives
/embed/ # Either /embed/
| /v/ # or /v/
| /watch\?v= # or /watch\?v=
) # End path alternatives.
) # End host alternatives.
([\w-]{10,12}) # Allow 10-12 for 11 char YouTube id.
$%x'
;
$result = preg_match($pattern, $url, $matches);
if (false !== $result) {
return $matches[1];
}
return false;
}
Lo que estoy pensando es que tiene que haber una manera en la que sólo puede buscar la "v =", no importa dónde se encuentra en la URL, y llevar a los personajes después de eso. De esta manera, no se necesitará ningún RegEx complejo. ¿Está fuera de la base? Alguna idea para los puntos de partida?
Creo que el principal problema con este patrón es solo el $ al final del patrón, que ancla el patrón al final de la cadena que se está probando. Esta es la razón por la que el Caso 1 no coincide, porque no termina con la ID. – Bendoh