我使用以下代码在长脚本中获得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];
}