PHP: извлечение идентификатора видео из URL YouTube - PullRequest
0 голосов
/ 01 февраля 2011

Я что-то не так делаю?Мне нужен код 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";
}

Правка - 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?

Ответы [ 3 ]

1 голос
/ 01 февраля 2011

Ваше регулярное выражение неверно. Есть несколько вещей не так с этим. Теперь, насколько вы хотите, попробуйте это:

#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 голосов
/ 08 августа 2011

указанная ссылка имеет пробел перед 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";
}

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

0 голосов
/ 01 февраля 2011
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11}

в соответствии с http://www.regexlib.com/REDetails.aspx?regexp_id=2569

...