如何通过preg_match获取facebook视频ID

时间:2015-07-04 23:39:13

标签: php preg-match

我的用户复制任何视频网址并粘贴到我的网络输入表单中以提交视频。我使用php preg_match从facebook / you-tube / yahoo / vimeo的URL获取视频ID。  但是没有facebook,每个人都认为很好。我无法获得任何Facebook视频ID。

现在有一天facebook使用不同类型的网址来播放视频,例如:

  1. https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2

  2. https://www.facebook.com/nikololok/videos/10153335471682286/

  3. https://www.facebook.com/videos/10153335471682286/

  4. 请帮助我从任何类型网址获取Facebook视频ID 10153335471682286

    我的工作:(

    $y_video = "https://www.youtube.com/watch?v=N1rethmzohw";
    $f_video = "https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2";
    $v_video = "https://vimeo.com/groups/imotional/videos/131543976";
    
    //For facebook
    if ($f_video > ''){
        if (preg_match("/(?:.*)\/([0-9]*)/i", $f_video, $matches)) {
        print 'facebook: ' . $matches[1] . '<br />';
        }
    }
    //For youtube
    if ($y_video > ''){
        if (preg_match("/(?:.*)v=([a-zA-Z0-9]*)/i", $y_video, $matches)) {
        print 'youtube: ' . $matches[1] . '<br />';
        }
    }
    //For vimeo
    if ($v_video > ''){
        if (preg_match("/(?:.*)\/([0-9]*)/i", $v_video, $matches)) {
        print 'vimeo: ' . $matches[1] . '<br />';
        }
    }
    

2 个答案:

答案 0 :(得分:3)

这是我的答案:

<?php
$videos = array('https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2', 'https://www.facebook.com/nikololok/videos/10153335471682286/', 'https://www.facebook.com/videos/10153335471682286/);');
foreach($videos as $f_video){
    preg_match("~/videos/(?:t\.\d+/)?(\d+)~i", $f_video, $matches);
    print_r($matches);
}

我将分隔符更改为~,因此网址中的/不需要转义。

这里是regex101链接https://regex101.com/r/qN8hK8/1,它将为您提供正则表达式正在执行的操作的详细说明。如果您有任何疑问,请发布。

答案 1 :(得分:1)

<?php

    $f_video = "https://www.facebook.com/lshokeenfilms/videos/1668437920119681/";
    $y_video = "https://www.youtube.com/watch?v=N1rethmzohw";
    $v_video = "https://vimeo.com/groups/imotional/videos/131543976";

    //For facebook
    if ($f_video > ''){
       if (preg_match("~(?:t\.\d+/)?(\d+)~i", $f_video, $matches)) {
       print 'facebook: ' . $matches[1] . '<br />';
       }
    }
    //For youtube
    if ($y_video > ''){
       if (preg_match("/(?:.*)v=([a-zA-Z0-9]*)/i", $y_video, $matches)) {
       print 'youtube: ' . $matches[1] . '<br />';
       }
    }
    //For vimeo
    if ($v_video > ''){
       if (preg_match("/(?:.*)\/([0-9]*)/i", $v_video, $matches)) {
       print 'vimeo: ' . $matches[1] . '<br />';
       }
    }

?>