2012-07-20 16 views
5

Attualmente sto usando il codice regex per separare gli ID dei video YT. Il motivo per cui sto usando regex è che gli URL dei video di YouTube variano in molti formati. Ho creato una regex che rileverà praticamente l'ID di quasi tutti i formati di url YT tranne quello sottostante. Ho provato a modificarlo ma senza fortuna. C'è un modo per fare in modo che Regex tolga l'id dall'URL sottostante?Regex: Stripping ID di video Youtube dall'URL

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

Utilizzare le funzioni di analisi dell'URL della lingua per leggere la stringa della query. –

risposta

3

Che ne dite di un'operazione di stringa? dovresti trovare "v =" e iniziare a leggere fino al prossimo "&"? che si darebbe l'ID del Video e si può facilmente creare l'URL dopo

-1

Perché non solo

$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; 

Si inizia praticamente sempre con av = ....

+0

Perché non tutte le varianti dell'URL di YouTube includono "v =" prima dell'ID video. –

0

il seguente dovrebbe lavoro:

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

Si ottiene ciò che inizia con & o ?, quindi l'id e poi la prossima & o alla fine.

Non conosco molto PHP, ma vedo che stai cercando di sostituire le stringhe. Questo non dovrebbe funzionare completamente. Penso che quello che dovresti fare è ottenere la corrispondenza con quanto segue e aggiungerla a una stringa per creare il tuo URL.

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

E quindi $ res l'URL desiderato.

+0

Grazie, potresti dirmi dentro quale parte della regex posso aggiungere? – techAddict82

+0

Questa è tutta la regex necessaria per ottenere l'ID. L'ID in questo caso sarebbe $ 2. –

+0

+1 Grazie ma se vuoi aggiungere l'id alla fine del mio url formattato qualcosa come questo: '('(& | \?) V = (\ w *) (& | $)', 'http://www.youtube.com/watch?v=$2 ', $ url); 'È corretto? – techAddict82

0

FYI Io uso questo codice che funziona per tutte le variazioni sono stato in grado di trovare:

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; 
    } 

Testato con queste variazioni:

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 

Originariamente trovato la funzione da this post un po ' fa.

Problemi correlati