2012-07-20 1 views
5

Ich verwende derzeit Regex-Code, um YT-Video-IDs zu trennen. Der Grund, warum ich Regex verwende, ist, dass yt Video-URLs in vielen Formaten variieren. Ich habe eine Regex erstellt, die die ID fast aller YT-URL-Formate mit Ausnahme der unten angegebenen erkennen wird. Ich habe versucht, es zu modifizieren, aber kein Glück. Gibt es eine Möglichkeit, Regex die ID von der unten stehenden URL entfernen zu lassen?Regex: ID des Youtube-Videos von der URL entfernen

http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ

Regex:

('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w]*~ix','http://www.youtube.com/watch?v=$1',$url); 
+0

Verwenden Sie die URL-Parsingfunktionen Ihrer Sprache, um die Abfragezeichenfolge zu lesen. –

Antwort

3

Wie wärs mit einem String-Operation? Sie würden "v =" finden und anfangen zu lesen bis zum nächsten "&"? das würde Sie das Video-ID geben und Sie können einfach die URL erstellen später

-1

Warum gehst du nicht einfach

$url = "http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ&hello=ok"; 
$stop = strlen($url); 
$pos = strpos($url,'v=')+2; 
$x = strpos($url,'&',$pos); 
if($x) 
    { 
    $x = $x - $pos; 
    $stop = $x; 
    } 
$str = substr($url,$pos,$stop); 
echo $str; 

Es im Grunde immer mit av beginnt = ....

+0

Da nicht alle YouTube-URL-Variationen "v =" vor der Video-ID enthalten. –

0

Folgendes sollte Arbeit:

(&|\?)v=(\w*)(&|$) 

Es wird alles, was mit & oder ? beginnt, dann die ID und dann die nächste & oder das Ende.

Ich kenne PHP nicht viel, aber ich kann sehen, dass Sie versuchen, Zeichenfolgen zu ersetzen. Das sollte nicht vollständig funktionieren. Ich denke, was Sie tun sollten, ist, dass die Übereinstimmung mit den folgenden erhalten und fügen Sie es zu einer Zeichenfolge, um Ihre eigene URL zu erstellen.

preg_match('(&|\?)v=(\w*)(&|$)', $url, $matches); 
$res = 'http://www.youtube.com/watch?v=' + $matches[1] 

Und dann $ res wird die URL, die wollen.

+0

Danke, kannst du mir bitte sagen, in welchem ​​Teil der Regex kann ich das hinzufügen? – techAddict82

+0

Das ist alles, was Sie brauchen, um die ID zu bekommen. Die ID wäre in diesem Fall $ 2. –

+0

+1 Danke, aber wenn ich die ID am Ende meiner formatierten URL hinzufügen möchte, so etwas: '('(& | \?) V = (\ w *) (& | $)', 'http://www.youtube.com/watch?v=$2 ', $ url); 'Ist das korrekt? – techAddict82

0

FYI verwende ich diesen Code, die für alle Variationen arbeitet ich fündig geworden:

function getYouTubeId($url) 
    { 
     $pattern = '#^(?:https?://|//)?(?:www\.|m\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#'; 
     preg_match($pattern, $url, $matches); 
     return (isset($matches[1])) ? $matches[1] : false; 
    } 

mit diesen Variationen getestet:

http://www.youtube.com/watch?v=-wtIMTCHWuI 
http://www.youtube.com/v/-wtIMTCHWuI?version=3&autohide=1 
http://youtu.be/-wtIMTCHWuI 
https://www.youtube.com/embed/-wtIMTCHWuI 

ursprünglich die Funktion von this post eine Weile gefunden vor.