2012-07-20 2 views
5

Actualmente estoy usando el código regex para separar los ID de video YT. La razón por la que estoy usando regex es que las URL de video yt varían en muchos formatos. He creado una expresión regular que detectará prácticamente la ID de casi todos los formatos de url de YT, excepto el de abajo. Intenté modificarlo pero sin suerte. ¿Hay alguna manera de que Regex elimine la identificación de la siguiente URL?Regex: Stripping ID del video de Youtube desde la 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

Utilice las funciones de análisis de URL de su idioma para leer la cadena de consulta. –

Respuesta

3

¿Qué tal una operación de cadena? usted podría encontrar "v =" y comenzar a leer hasta el siguiente "&"? Eso le daría la identificación de video y se puede crear fácilmente la URL tarde

-1

¿Por qué no sólo

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

Básicamente siempre comienza con av = ....

+0

Porque no todas las variaciones de la URL de YouTube incluyen "v =" antes de la identificación del video. –

0

Lo siguiente debe trabajo:

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

Se pone lo comienza con & o ?, el ID y luego el siguiente & o el final.

No sé mucho PHP, pero puedo ver que está tratando de reemplazar cadenas. Eso no debería funcionar completamente. Creo que lo que debes hacer es obtener la coincidencia con lo siguiente y agregarla a una cadena para construir tu propia URL.

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

res y luego $ voluntad de los URL que quiere.

+0

Gracias, ¿podría decirme en qué parte de la expresión regular puedo agregar eso? – techAddict82

+0

Esa es toda la expresión regular que necesita para obtener la ID. El ID en este caso sería $ 2. –

+0

+1 Gracias, pero si desea agregar el ID al final de mi url formateado, algo como esto: '('(& | \?) V = (\ w *) (& | $)', 'http://www.youtube.com/watch?v=$2 ', $ url); '¿Es esto correcto? – techAddict82

0

FYI Puedo usar este código que funciona para todas las variaciones que he podido encontrar:

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

probado con estas variaciones:

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 

encontró originalmente la función de this post un tiempo hace.

Cuestiones relacionadas