RegEx patrón para obtener la identificación de video de YouTube desde cualquier URL de YouTube
Tomemos estas URL como ejemplo:
http: //www.youtube.com/watch? v = 8GqqjVXhfMU & feature = youtube_gdata_playerhttp: //www.youtube.com/watch? v = 8GqqjVXhfMUEsta función PHP NO obtendrá correctamente la ID en el caso 1, pero sí en el caso 2. El caso 1 es muy común, donde CUALQUIER COSA puede estar 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 debe haber una forma en la que pueda buscar "v =", sin importar dónde se encuentre en la URL, y tomar los caracteres después de eso. De esta manera, no se necesitará un RegEx complejo. ¿Está esto fuera de la base? ¿Alguna idea para los puntos de partida?