Preg_match不会从所有YouTube链接中获取代码.如何修复


preg_match does not get code from all youtube links. how to fix?

我使用以下代码在长脚本中获得youtube代码。它适用于这个链接

"啦啦啦啦http://www.youtube.com/watch?v=kkLTxsAhURw啦啦啦"但在这个链接中不起作用"啦啦啦啦http://www.youtube.com/watch?v=3YDz-ftqr1g啦啦啦啦"

它得到'3YDz'之前-但不是其余的…我怎么能从第二个链接得到所有的代码?谢谢。

preg_match('~v=([A-Za-z0-9]+)~', $txt, $match); 

小改动:

preg_match('@v=(['-A-Za-z0-9]+)@', $txt, $match); 

就像别人说的,但是你可以把regx缩短一点。

preg_match(''v=([-'w]+)'', $txt, $match); 

演示http://regex101.com/r/tM2hU3/1

其他答案也可以,但是这是一个更健壮的正则表达式:

<?php
$string = "This is video on youtube **http://www.youtube.com/watch?v=wKTBUmrwYDs**";
preg_match( '#http(s?)://(((www'.)?youtube'.com)|(youtu'.be))/((watch.*('?|'&)v=([^&]+))|((embed/)?([a-z0-9'-_]+))|)#i' , $string , $matches );
$youtube_id = array_pop( $matches );

这个问题已经被问过很多次了…

这里有一个答案,应该也适用于你:使用preg_match解析YouTube视频id

正则表达式:

if (preg_match('%(?:youtube(?:-nocookie)?'.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu'.be/)([^"&?/ ]{11})%i', $url, $match)) {
    $video_id = $match[1];
}