RegEx Muster, um die YouTube video-ID aus jedem YouTube-URL
Lassen Sie uns nehmen Sie diese URLs als Beispiel:
- http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
- http://www.youtube.com/watch?v=8GqqjVXhfMU
Diese PHP-Funktion NICHT richtig um die ID in Fall 1, nicht aber Fall 2. Fall 1 ist sehr verbreitet, wo NICHTS kommen kann, hinter die YouTube-ID.
/**
* 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;
}
Was ich mir denke ist, dass es einen Weg geben muss, wo ich kann, schau einfach nach dem "v=", egal wo es liegt in der URL, und nehmen Sie die Zeichen nach, die. In dieser Weise, werden keine komplexen RegEx benötigt werden. Ist dieser off base? Irgendwelche Ideen für Ansatzpunkte?
- Ich denke, das Hauptproblem mit diesem Muster ist nur das $ am Ende des Musters, die Anker das Muster am Ende des Strings geprüft. Dies ist der Grund, warum Fall 1 nicht entsprechen, weil es noch nicht zu Ende mit der ID.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, was ich verwenden, zum extrahieren der id aus einer youtube-url. Ich denke, es funktioniert in allen Fällen.
Beachten Sie, dass am Ende $Werte = id des Videos
parse_str
- die wie es scheint, fängt jede variable in der URL perfekt?Anstelle von regex. Ich hightly empfehlen
parse_url()
undparse_str()
:Getan
Könnte man nur verwenden,
parse_url
undparse_str
:Benutzt habe ich die folgenden Muster, weil YouTube hat eine youtube-nocookie.com domain zu:
In deinem Fall würde es nur bedeuten, erweitern Sie die vorhandenen Ausdrücke mit eine optionale (-nocookie) für die regelmäßige YouTube.com URL etwa so:
Wenn Sie Ihre vorgeschlagenen Ausdruck NICHT enthalten die finalen $, es sollte funktionieren wie Sie sollen. Ich fügte hinzu, die -nocookie als gut.
Weitere einfache Möglichkeit ist die Verwendung
parse_str()
:Den parse_url Vorschläge sind gut. Wenn Sie wirklich wollen, eine regex, die Sie verwenden können, dieses:
LÖSUNG für jeden YOUTUBE-LINK:
==
https://stackoverflow.com/a/20614061/2165415
Hier ist eine Lösung
Es kann im Umgang mit mobile-links zu.
Hier ist meine Funktion für das abrufen von Youtube-ID !