如何在 php 中使用正则表达式 return 来自 URL 的视频的主机名?

How to return the host name of the video from a URL using regex in php?

有两个url:

1- http://www.facebook.com/?v=107084586333124'

2- https://www.youtube.com/watch?v=Ws_RjMYE85o

如您所见,两个 link 都包含 ?v=............

我正在使用一个函数来检索视频 ID 和主机名称(youtube、facebook 等)。

我正在使用此函数获取 ID 和主机名

function get_video_id($url){
    $video_id = "";
    //YOUTUBE
    if(preg_match('#(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+#', $url, $videoid)){
            if(strlen($videoid[0])) { 
                $video_id = 'youtube:_:'.$videoid[0]; 
            }
    }

    //VIMEO
    if(preg_match('#(https?://)?(www.)?(player.)?vimeo.com/([a-z]*/)*([0-9]{6,11})[?]?.*#', $url, $videoid)){
            if(strlen($videoid[5])) { 
                $video_id = 'vimeo:_:'.$videoid[5]; 
            }
    }

    // Facebook 
    if(preg_match("~/videos/(?:t\.\d+/)?(\d+)~i", $url, $videoid)){
        if(strlen($videoid[0])) { 
            $video_id = 'facebook:_:'.$videoid[1]; 
        }
    }

    return $video_id;


}
    $exp = explode(':_:',get_video_id($_POST['video_url']));
    echo $exp[0] .'=>'.$exp[1];

$exp[0] 应该 return 主机名(youtube、vimeo、facebook 等);

$exp[1] return 视频 ID。

该功能运行良好,但我遇到的问题是,当我提交包含 ?v=

的 facebook 视频 link 时

(eg. http://www.facebook.com/?v=107084586333124')

它总是 returns youtube 作为主机名。不像我提交 link 这样的:

https://www.facebook.com/LadBlab/videos/540736926073557/

it return facebook 因此工作正常。

当用户提交这样的 link 并且不与 youtube 混淆时,如何检查 url 是否为 facebook 视频?

http://www.facebook.com/?v=107084586333124'

你可以使用这样的东西

$url = 'http://facebook.com/?v=4654654';
if(strpos($url, 'facebook') != FALSE) {
  //facebook link
} else if(strpos($url, 'youtube') != FALSE) {
  //youtubelink
} else {
  //someother link
}

然后将您的 preg_match 分别应用于每个 link 以获取视频 ID。