使用PHP从包含youtube / vimeo url的字符串中提取域名,视频网址和视频ID的正则表达式模式

时间:2016-05-25 00:46:24

标签: javascript php youtube preg-match-all vimeo

我需要一个正则表达式或php preg_match函数,它应该从包含视频网址的字符串中提取youtube / vimeo网址和视频提供程序/域名,如(vimeo / youtube)。

从提取的字符串视频网址中,我需要找到确切的视频ID。

正则表达式也应该从下面的网址中绘制视频ID,

  1. 的Youtube https://youtube.googleapis.com/v/jGyZDgpv_Hk

  2. VIMEO https://vimeo.com/channels/staffpicks/167414855

  3. 谢谢,我正在研究解决方案。如果我找到它,我会发布答案。

1 个答案:

答案 0 :(得分:1)

$sample_text = "Cieker is the largest talentize social and professional networking website, you can view it on https://www.cieker.com and the about video is on https://www.youtube.com/watch?v=jGyZDgpv_Hk";

//从字符串中返回视频网址的功能

  function extract($html)
  {

  $regex = '/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|channels\/(?:\w+\/)|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/';

  preg_match_all($regex, $html, $match);

  $matched = array_unique($match[0]);

  usort($matched, function($a, $b) 

  {

      return strlen($b) - strlen($a);

  });

  return $matched;

}

//调用函数,从字符串中返回youtube或vimeo网址。

$check_extract = extract($sample_url ); 

//用于查找视频提供商名称。

function videoType($url) {

if (strpos($url, 'youtu') > 0)
{

  return 'youtube';

} 
else if (strpos($url, 'vimeo') > 0) 
{

  return 'vimeo';

} 
else 
{

  return 'unknown';

}

}

//调用函数,已将提取的url作为参数。

$provider = videoType($check_extract[0]);

//以下正则表达式将从上面提取的youtube网址中提取视频ID。

if($provider=="youtube")

{
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/",$check_extract[0], $matches);?>
$id =$matches[1];

}

else if($provider=="vimeo")

{

preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/",$check_extract[0], $output_array);?>

$id =$output_array[5];

}

//这将获得youtube / vimeo的视频ID。

$video_id = $id;

enter image description here