2011-01-17 9 views
0

Zunächst möchte ich sagen, dass ich weiß, es gibt eine Reihe von verwandten Fragen, aber nach dem Versuch, die Lösungen in diesen Themen, I noch haben etwas, das nicht für mein Code funktioniert ..Regex zum Extrahieren youtube vid mit "www.youtube/user/" -Typ Url

ich brauche einen regulären Ausdruck für die youtube vid von dieser speziellen Art von URL zu extrahieren:

http://www.youtube.com/user/thedailyenglishshow#p/u/0/B3-Bn4aUXTY

Mein pHP-Code und Muster verwendet aussehen dies:

public function retrieveUserVideo($data) { 

    $url = $data; 
    $pattern = '/[^\/]+$/'; 
    //$pattern = '(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+'; 
    preg_match($pattern, $url, $matches); 
    $result = $matches[1]; 

    return $result; 
} 

Ich habe diese Muster bei "http://gskinner.com/RegExr/" überprüft, und sie scheinen zu funktionieren, aber ich erhalte eine leere Ergebniszeichenfolge mit dem ersten Muster, während mit der zweiten ich einen unbekannten Modifizierer bekomme '[' Error. Wenn ich das Muster zwischen '#' setze, bekomme ich das leere String-Ergebnis.

Irgendwelche Ideen, was mit dem Code falsch ist? Bitte hilf mir, ich bin wirklich verzweifelt!

+0

Das Problem war, dass Sie nichts "()" mit Ihrer Regex erfassen. Steven Antwort sollte auf diese Frage –

+0

Die Antwort funktionieren könnte Ihnen helfen ... http://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match/6382259#6382259 – Benjam

Antwort

1

Sie werden PHP Regex Trennzeichen um Ihr Muster benötigen, so dass Ihre Fehler verursacht haben könnten. Aber was sind Ihre Parser-Anforderungen? Wenn Sie nur darauf achten, die Video-ID abzurufen, warum erfassen Sie nicht einfach alle Zeichen nach dem letzten Schrägstrich? /\/([^\/]*)$/ wird B3-Bn4aUXTY für $matches[1] in Ihrem Beispiel zurückgeben.

+0

Ich musste die gesamte URL aus Sicherheitsgründen analysieren, aber da Ihr Muster gut funktioniert, werde ich sicherstellen, dass es nur eine Youtube-URL ist, bevor ich die Daten an diese Funktion übergebe. Wirklich einfache Lösung vielen Dank für die Hilfe! – Iker

+0

Über welche Sicherheitszwecke sprechen Sie? Wenn Sie nur die Video-ID benötigen und die Menge aller Zeichen ermitteln können, die in der ID erscheinen können, können Sie Ihre Übereinstimmung auf '/ \/([- A-Za-z0-9]) verfeinern. *) $/'. Sicher, Sie werden einige falsche Positive erhalten, aber Sie werden sich keinen unsicheren Daten aussetzen. –

1

Was ist mit einem einfachen explode, um den letzten Teil zu bekommen?

public function retrieveUserVideo($data) { 
    $parts = explode('/', $data); 
    return end($parts); 
} 
+0

'$ parts [0]' würde den ersten Teil zurückgeben, nicht den letzten –

+0

Huch! Einfach den dummen Fehler behoben: P – scoffey

+0

+1 jetzt ____________ –

Verwandte Themen