2011-02-01 3 views
0

Я что-то не так? Мне нужен код youtube, но он не возвращает реальное значение.PHP: извлечение идентификатора видео с URL-адресов YouTube

if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg"; 
} 

Edit - ircmaxell на основе комментария, структура ссылка в тексте:

HTTP: // www.youtube.com/v/plMvAh10HVg%26hl=en%26fs = 1% 26rel = 0


Обновление

Проблема заключается в том: мой код возвращает ссылку, как это:

http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0 

Могу ли я остановить его с регулярным выражением до появления %26hl=en%26fs=1%26rel=0?

+0

Эта ссылка, указанная вами, является недействительной ссылкой. Даже если вы указали urldecode, он все равно будет 'plMvAh10HVg & hl = en & fs = 1 & rel = 0', который не является допустимым URL (он должен иметь'? 'До первого' и 'бит) ... – ircmaxell

+0

Can ' t youtube ссылки будут смотреть? v = бла? Если вы смотрите только на/v/blah-ссылки, просто используйте parse_url, чтобы получить путь и отбросить/v в начале. –

ответ

1

Неправильное выражение в регулярном выражении. С этим связано несколько вещей. Теперь, насколько то, что вы хотите, попробуйте следующее:

#http://(?:.*)youtube.com/v/([^/\#?]+)# 

Теперь, как и почему, давайте посмотрим на регулярное выражение:

http://(?:.*)youtube.com 

Вы ищете строку, которая начинается с http://, имеет что-либо после (www., ww2., или ничего).

/v/ 

Вы ищете /v/ в начале URL.

([^/\\#?]+) 

Вы ищете все остальное к другому /, строка запроса (?) или якорь (#). Таким образом, это должно соответствовать идентификатору, который вы ищете.

Таким образом, было бы

if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg"; 
} 

Если вы хотите, чтобы найти все:

if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){ 
    foreach ($matches[1] as $match) { 
     $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg"; 
    } 
} 
+0

Strenge, он возвращает сообщение: – Klauzito

+0

@ user580463: Он отлично работает для меня: http://regexcalc.net/ – ircmaxell

+0

Проблема в следующем: мой код вернет ссылку вроде этого: http://i1.ytimg.com/ vi/plMvAh10HVg% 26hl = en% 26fs = 1% 26rel = 0 Могу ли я остановить его с помощью регулярного выражения до появления% 26hl = en% 26fs = 1% 26rel = 0 ?? – Klauzito

-1
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11} 

согласно http://www.regexlib.com/REDetails.aspx?regexp_id=2569

+1

Это регулярное выражение отключается. Почему это должно/должно совпадать с 'youtubeee.com'? – ircmaxell

+1

Если вы хотите опубликовать регулярное выражение, которое вы не создали, вы должны сначала проверить его. Большинство регулярных выражений, которые вы можете найти в Интернете, - это дерьмо, а те, что на RegExLib, не являются исключением. –

0

связь при условии, имеет место до 1 мас на веб-сайте www.youtube.com необходим код:

if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){ 
    $code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg"; 
} 

также, код, который у вас закодирован, вы можете использовать urldecode ($ row-> n_texto) перед его использованием.

Смежные вопросы