2012-12-11 49 views
0

我有这样的正则表达式行话抢YouTube视频ID的preg_match_all()和YouTube正则表达式

preg_match_all('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res);

但是它似乎并没有与该示例中的字符串波纹管正常工作:

<?php 

$string = "yet, another youtube video. 

[url=http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#]http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#[/url] 


Fonte:onothersite"; 

preg_match_all('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res); 

print_r($res); 

?> 

上面的代码输出该:

Array (
    [0] => 
    Array (
     [0] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#]http://www.youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI#[/url] Font 
    ) 
    [1] => 
    Array ( 
     [0] => url] Font 
    ) 
) 

并且应该输出第是:

Array (
    [0] => 
    Array (
     [0] => youtube.com/watch?v=6kVpM5WK5JI 
    ) 
    [1] => 
    Array ( 
     [0] => 6kVpM5WK5JI 
    ) 
) 

任何想法如何解决这个问题?

谢谢。

+0

您可以考虑匹配一个通用的URL(以'youtube.com'或'youtu.be'开头),然后使用['parse_url'](http://php.net/)提取实际参数manual/en/function.parse-url.php)和['parse_str'](http://uk3.php.net/manual/en/function.parse-str.php)。 –

+0

这有帮助吗?:http://stackoverflow.com/questions/5830387/php-regex-find-all-youtube-video-ids-in-string/5831191#5831191 –

+0

另请参阅:http://stackoverflow.com/questions/2936467/parse-youtube-video-id-using-preg-match –

回答

0

小心贪婪的模式,如.+.*!我用[^\/]+[^#]*分别替换它,它似乎工作。

preg_match_all('/(?:youtube\.com\/(?:[^\/]+\/[^\/]+\/|(?:v|e(?:mbed)?)\/|[^#]*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i', $string, $res); 

给出

Array ( 
    [0] => Array ( 
     [0] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI 
     [1] => youtube.com/watch?feature=player_embedded&v=6kVpM5WK5JI 
     ) 
    [1] => Array ( 
     [0] => 6kVpM5WK5JI 
     [1] => 6kVpM5WK5JI 
     ) 
    ) 

更新以除去第二贪婪模式。

+0

非常感谢您的回答和关注。它确实工作,但有人建议这样:http://stackoverflow.com/questions/5830387/php-regex-find-all-youtube-video-ids-in-string/5831191#5831191,我发现它是更完整比我之前使用的例子,所以我将使用该正则表达式模式。再次感谢。 – BornKillaz