Kann mir jemand zeigen, wie man die YouTube-ID aus einer URL herausholt, unabhängig davon, welche anderen GET-Variablen in der URL enthalten sind.
Verwenden Sie dieses Video zum Beispiel: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
Also zwischen v=
und vor dem nächsten&
$ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $hash =unserialize(curl_exec($ch)); curl_close($ch);
Antworten:
Verwenden Sie parse_url () und parse_str () .
(Sie können reguläre Ausdrücke für fast alles verwenden, aber es ist sehr leicht, Fehler zu machen. Wenn es also PHP-Funktionen speziell für das gibt, was Sie erreichen möchten, verwenden Sie diese.)
parse_url nimmt einen String und schneidet ihn in ein Array mit einer Reihe von Informationen. Sie können mit diesem Array arbeiten oder das gewünschte Element als zweites Argument angeben. In diesem Fall interessiert uns die Abfrage
PHP_URL_QUERY
.Jetzt haben wir die Abfrage, das heißt
v=C4kxS1ksqtw&feature=relate
, aber wir wollen nur das Teil danachv=
. Dazu wenden wir uns dem zu,parse_str
was im Grunde wieGET
bei einer Saite funktioniert . Es nimmt eine Zeichenfolge und erstellt die in der Zeichenfolge angegebenen Variablen. In diesem Fall$v
und$feature
wird erstellt. Wir sind nur interessiert an$v
.Um sicher zu gehen, möchten Sie nicht einfach alle Variablen aus dem
parse_url
in Ihrem Namespace speichern (siehe Kommentar von mellowsoon). Speichern Sie die Variablen stattdessen als Elemente eines Arrays, damit Sie steuern können, welche Variablen Sie speichern, und eine vorhandene Variable nicht versehentlich überschreiben können.Alles zusammen haben wir:
Arbeitsbeispiel
Bearbeiten:
hehe - danke Charles. Das hat mich zum Lachen gebracht, ich habe das Zawinski-Zitat noch nie gesehen:
Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.
- Jamie Zawinskiquelle
parse_url()
unter der Haube funktioniert), ist dies der richtige Weg.Dies wird erklären
Ich habe es leicht verbessert, um Folgendes zu unterstützen: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1
Die Zeile, die ich jetzt benutze, ist:
quelle
#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#
(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+
rubular.com/r/M9PJYcQxRW$matches
Array mit weiteren Informationen, einschließlich der Video-ID, die für mein Projekt sehr nützlich warBasierend auf Bokors Kommentar zu Anthonys Antwort:
$matches[1]
enthält das vididStreichhölzer:
Stimmt nicht überein:
quelle
#
zur End-Capture-Gruppe hinzugefügt :preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
Dies kann sehr einfach mit parse_str und parse_url erreicht werden und ist meiner Meinung nach zuverlässiger.
Meine Funktion unterstützt die folgenden URLs:
Enthält auch den Test unterhalb der Funktion.
quelle
LÖSUNG Für jeden Link-Typ !! ::
Ausgänge:
GvJehZx3eQ1
quelle
behoben basierend auf Wie werden YouTube-Video-IDs überprüft?
quelle
Wir wissen, dass die Video-ID 11 Zeichen lang ist und vor
v=
odervi=
oderv/
odervi/
oder stehen kannyoutu.be/
. Der einfachste Weg, dies zu tun:Und Ausgabe:
quelle
Das Folgende funktioniert für alle YouTube-Links
quelle
quelle
Dies sollte es auch tun.
quelle
Ich hatte einige Post-Inhalte, die ich durchgehend verschlüsseln musste, um die Youtube-ID zu erhalten. Es war zufällig in Form des
<iframe>
Einbettungscodes, den Youtube bereitstellt.Das folgende Muster habe ich von @rob oben bekommen. Das Snippet führt eine
foreach
Schleife durch, sobald die Übereinstimmungen gefunden wurden, und für einen zusätzlichen Bonus habe ich es mit dem Vorschaubild auf Youtube verknüpft. Es könnte möglicherweise mehr Arten von Youtube-Einbettungstypen und URLs entsprechen:Robs Profil: https://stackoverflow.com/users/149615/rob
quelle
Zum Extrahieren von
id
in einer Erfassungsgruppe kann auch der folgende Ausdruck oder eine Ableitung davon eine Option sein:Demo
Prüfung
Ausgabe
Wenn Sie den Ausdruck vereinfachen / ändern / untersuchen möchten, wurde dies im oberen rechten Bereich von regex101.com erläutert . Wenn Sie möchten , können Sie in diesem Link auch sehen , wie es mit einigen Beispieleingaben übereinstimmt.
RegEx Circuit
jex.im visualisiert reguläre Ausdrücke:
quelle
quelle
Ich weiß, dass sich der Titel des Threads auf die Verwendung einer Regex bezieht, aber genau wie das Zawinski-Zitat sagt, denke ich wirklich, dass es hier am besten ist, Regexe zu vermeiden. Ich würde stattdessen diese Funktion empfehlen:
Ich empfehle dies, da die ID von YouTube-Videos immer gleich ist, unabhängig vom Stil der URL, z
http://www.youtube.com/watch?v=t_uW44Bsezg
http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
und das könnte bei eingebetteten und
iframe
-ed-Sachen der Fall sein .quelle
Ich habe dies gerade online unter http://snipplr.com/view/62238/get-youtube-video-id-very-robust/ gefunden.
quelle
Ich habe die Daten aus Shawns Antwort verwendet, aber den regulären Ausdruck ein wenig verallgemeinert und verkürzt. Der Hauptunterschied zu diesem ist, dass es nicht nach einer gültigen Youtube-URL sucht, sondern nur nach einer Video-ID sucht. Dies bedeutet, dass weiterhin eine Video-ID für zurückgegeben wird
www.facebook.com?wtv=youtube.com/v/vidid
. Funktioniert für alle Testfälle, ist aber etwas lockerer. Folglich wird für so etwas ein falsches Positiv ausgegebenhttps://www.twitter.com/watch?v=vidid
. Verwenden Sie diese Methode, wenn die Daten sehr inkonsistent sind, andernfalls verwenden Sie einen spezifischeren regulären Ausdruck oderparse_url()
undparse_str()
.quelle
Ich denke, Sie versuchen das zu tun.
quelle
und was ist, wenn ich eine youtue-URL aus einer Zeichenfolge voller anderer Zeichen extrahieren möchte? so was:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud Übung ullamco https://www.youtube.com/watch?v=cPW9Y94BJI0 laboris nisi ut aliquip ex ea Commodo Konsequenz. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
und https://www.youtube.com/watch?v=cPW9Y94BJI0 von dieser Zeichenfolge erhalten?
quelle
Verwenden Sie diesen Code:
Ergebnis:
C4kxS1ksqtw
quelle