【发布时间】:2015-09-22 10:15:31
【问题描述】:
我的用户复制任何视频 URL 并粘贴到我的网络输入表单中以提交视频。我使用 php preg_match 从 facebook/you-tube/yahoo/vimeo 的 URL 获取视频 ID。 但是没有 facebook,每个想法都可以正常工作。我无法获得任何 Facebook 视频 ID。
现在一天 facebook 使用不同类型的 url 来播放视频,例如:
https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2
https://www.facebook.com/nikololok/videos/10153335471682286/
请帮我从这些类型的网址中获取 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 />';
}
}
【问题讨论】:
-
这是什么奇怪的情况
($f_video > '')? -
是您的 URL 唯一可以使用的情况吗?如果是这样,我认为
preg_match("~.*?/videos/(?:t.\d+/(\d+)|(\d+))~i", $f_video, $matches);应该这样做。演示:regex101.com/r/dB0yX4/1 -
@Casimir et Hippolyte $f_video = mysqli_real_escape_string($db, $_POST['f_video']);
-
@chris85 它适用于第一种类型的 URL,但不适用于上述第二种类型的 URL
-
如果您将
t\.\d+部分设为可选,则您可以拥有相同的组:/videos/(?>t\.\d+/)?(\d+)
标签: php preg-match