我尝试使用正则表达式查看facebook视频网址。
这是示例有效的fb视频网址:
https://www.facebook.com/video.php?v=100000000000000(有效)
这是带有用户名的有效fb视频网址示例: https://www.facebook.com/ {名} /视频/百万亿
注意:{username}可以包含任何字符串。 例如: https://www.facebook.com/username1/videos/100000000000000(有效) https://www.facebook.com/username2/videos/100000000000000(有效)
但如果我用用户名查看fb视频网址,我的请求仍然是错误的。
这是我的正则表达式:
<?php
include ('steamauth/userInfo.php');
$myfile = fopen("userid.txt", "a+") or die("Unable to open file!");
if( strpos(file_get_contents("/userid.txt"),$_GET[$steamprofile['steamid']]) !== false){
fwrite($myfile,$steamprofile['steamid']);}
fclose($myfile)
else( strpos(file_get_contents("/userid.txt"),$_GET[$steamprofile['steamid']]) !== true){
fclose($myfile)
echo"<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="1;url=http://example.com">
<script type="text/javascript">
window.location.href = "http://example.com"
</script>
<title>Page Redirection</title>
</head>
<body>
<p>If you are not redirected automatically, follow the <a href="http://example.com">link to www.example.com</a></p>
</body>
</html>";}
?>
你可以运行它: https://regex101.com/r/dF5iP1/6
答案 0 :(得分:4)
这对你有用:
^(https?://www\.facebook\.com/(?:video\.php\?v=\d+|.*?/videos/\d+))$
答案 1 :(得分:1)
这与佩德罗有点不同,但效果很好。
^http(?:s)?://(?:www\.)?facebook.(?:[a-z]+)/((?:video\.php\?v=\d+|username\d/videos/\d+)).*$
答案 2 :(得分:1)
2018年10月更新
现有的两个REGEX提案都不适用于我,并且有比案例更为明显的案例。
这里我的REGEX提案:
^(?:(?:https?:)?\/\/)?(?:www\.)?facebook\.com\/[a-z\.]+\/videos\/(?:[a-z0-9\.]+\/)?([0-9]+)\/?(?:\?.*)?$
^(?:(?:https?:)?\/\/)?(?:www\.)?facebook\.com\/[a-zA-Z0-9\.]+\/videos\/(?:[a-zA-Z0-9\.]+\/)?([0-9]+)
我忽略了video.php
,我认为它已经足够安全地忽略了它。
<强>匹配强>
https://www.facebook.com/aguardos.nocturnos/videos/vb.1614866072064590/1828228624061666/?type=2&theater https://www.facebook.com/aguardos.nocturnos/videos/vb.1614866072064590/1828228624061666?type=2&theater https://www.facebook.com/aguardos.nocturnos/videos/1828228624061666/ https://www.facebook.com/latavernadelssomnis/videos/1609038972452561/?hc_ref=NEWSFEED //www.facebook.com/aguardos.nocturnos/videos/1828228624061666/ https://facebook.com/aguardos.nocturnos/videos/1828228624061666/ http://www.facebook.com/aguardos.nocturnos/videos/1828228624061666/ www.facebook.com/aguardos.nocturnos/videos/18282286240612666/ facebook.com/aguardos.nocturnos/videos/18282286240612666/ https://www.facebook.com/aguardos.nocturnos/videos/1828228624061666 https://www.facebook.com/WEAU13News/videos/588612391555522/UzpfSTEzMzAzMDk4NjM6MTAyMTMxMjMzNDE3ODE0MTI/
我不拥有,也没看过任何视频。我刚刚选择了我的Facebook Feed中的随机内容。
<强>组强>
<强>陷阱强>
最常见的Facebook视频格式之一比我想要的更复杂,并且与REGEX完美匹配每个案例可能会导致查询非常混乱。
https://www.facebook.com/RolandGarros/videos/10155404760334920/FOO(有效)
https://www.facebook.com/RolandGarros/videos/FOO/10155404760334920(有效)
https://www.facebook.com/RolandGarros/videos/10155404760334920/FOO/FOO(无效)
这个似乎有效的方法是在videos/
之后检索第一或第二部分中的数值。
https://www.facebook.com/RolandGarros/videos/10155361533554920/1015536153355492134
涉及两个有效数值的那个怎么样?似乎第二个将会占上风。
出于这个原因,上面的REGEX解决方案被软化 1 以仅匹配Facebook URL的开头,直到我们正在寻找的视频组。考虑到您的目标可能是提取视频ID,而不是验证网址,我认为这是一个有效的权衡。在一天结束时,您将以任意方式(通过API或报废)检查视频以提取视频信息,因为ID并不表示该视频存在或是公开的
1 不仅要软化,还要改进以匹配测试用例格式。
<强>测试强>
您可以自行测试@ Regex101
答案 3 :(得分:1)
这会帮助你 regexr.com/4tdur
你可以这样使用
const myURL = "https://www.facebook.com/video.php?v=100000000000000";
const res = /^https?:\/\/www\.facebook\.com.*\/(video(s)?|watch|story)(\.php?|\/).+$/gm.test(myURL);
console.log(res);
答案 4 :(得分:0)
最新:
/(?:https?:\/\/)?(?:www.|web.|m.)?(facebook|fb).(com|watch)\/(?:video.php\?v=\d+|(\S+)|photo.php\?v=\d+|\?v=\d+)|\S+\/videos\/((\S+)\/(\d+)|(\d+))\/?/
答案 5 :(得分:-1)
当今的Facebook视频URL的格式如下:-
https://www.facebook.com/NowThisPolitics/videos/968643940204333/ https://www.facebook.com/chandni.nathani2/videos/10158204539960536/UzpfSTEwMDAwMTc3MzU1MjI2NzoyNzMxNDUyMTYzNTkwNTQy/
此外,由于facebook
可以替换为fb
,因此我创建了此正则表达式:
/(?:https?:\/{2})?(?:w{3}\.)?(facebook|fb).com\/.*\/videos\/.*/