Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Что не так с регулярным выражением


Автор: php5 13.6.2014, 18:32
Есть 2 вида ссылок  
$url1 = 'http://rutube.ru/video/d5a659aa519c7ee02b369ac858f06251';
$url2 = 'http://rutube.ru/play/embed/7027220?autoStart=true&bmstart=0&isFullTab=true&ref=window';
Необходимо вытащить в первой ссылки d5a659aa519c7ee02b369ac858f06251, а во второй 7027220
Написал регулярное выражение 

Код

$urlmatch = 'http://(?:www\.)?rutube\.ru/(?:video|play/embed)/(?:(\d+)|([0-9a-f]{32}))';
preg_match('~'.$urlmatch.'~imu', $url1, $match);
print_r($match);


на  выходе получаю 
Array ( [0] => http://rutube.ru/video/d5a659aa519c7ee02b369ac858f06251 [1] => [2] => d5a659aa519c7ee02b369ac858f06251 ) 
Как видно из вывода  почему то 2-м элементом в массив попадает пустая строка. Как это исправить    

Автор: Romikgy 13.6.2014, 21:22
Код

http://(?:www\.)?rutube\.ru/(?:video|play/embed)/([0-9a-f]{7,32})\?{0,1}

так не?

или ваш вариант
Код

http://(?:www\.)?rutube\.ru/(?:video|play/embed)/(?:(\d+|[0-9a-f]{32}))

Автор: baldina 13.6.2014, 21:57
Код

(?:video|play/embed)/(\w+)
http://ideone.com/qe7fAl

Автор: php5 14.6.2014, 17:01
Всем спасибо, все  варианты работают )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)