我有这个字符串,可能包含一些我需要抓取的网址。例如,如果用户执行:
www.youtube
...
或
www.vimeo
...
或
http://www.youtube
...
或
HttP://WwW.viMeo
我需要抓住它(直到他找到一个空间)。并将其存储在已创建的数组中。
需要将vimeo链接与youtube链接分开,并将每个链接放在相应的视频对象上。
我不确定这是否可行,我的意思是,如果来自浏览器的URL可以用于放置在预定义的视频对象上。如果是,那么这就是要走的路(所以我相信)。
如果所有这些都可行,我可以帮助您制定这样的规则吗?
提前致谢
答案 0 :(得分:5)
这匹配您需要的链接,并按站点名称将它们存储在2D数组中:
$video_links = array();
if (preg_match_all("'(http://)?(www[.])?(youtube|vimeo)[^\s]+'is",$str,$n)) {
foreach ($n[3] as $key => $site)
{
$video_links[$site][] = $n[0][$key];
}
}
这是做什么的?
此匹配将$str
中所需网址的3 + 1部分分开,这是您的字符串:
http://
(可选)www.
(可选)vimeo
或youtube
preg_match_all返回一个2D数组,其中第一级包含上述部分编号,内部的每个匹配都是每个匹配的一部分。所以你迭代匹配的第3部分($n[3]
),并使用数组键来引用第0部分($n[0][$key]
),并将它们安排在一个漂亮的2D数组中,如下所示:
$video_links = array (
'vimeo' => array (
0 => 'vimeo link 1',
1 => 'vimeo link 2',
// ...
),
'youtube' => array (
0 => 'youtube link 1',
1 => 'youtube link 2',
// ...
)
);
答案 1 :(得分:1)
你应该做的是首先将所有http://
和www.
的实例替换为空,然后将其重新添加到字符串中,这使字符串保持一致
str_replace(array("http://www.","http://"),"",$url);
$url = "http://" . $url;
然后您可以使用parse_url
来检查数据
$Data = parse_url($url);
然后只需相应检查您的值。
switch(strtolower($Data['host']))
{
case "youtube.com":
// :)
break;
case "vimeo.com":
// :)
break;
case "something.tld":
// :)
break;
}
$Data
的转储将输出如下内容:
[scheme] => http
[host] => youtube.com
[user] =>
[pass] =>
[path] => /watch
[query] => v=r8FVAHuQvjc&feature=topvideos
[fragment] =>
你现在可以去
$lastSegment = $Data["path"] . "?" . $Data["query"];
会返回类似/watch?v=r8FVAHuQvjc&feature=topvideos
如果你想要查询中的单个项目,例如视频ID,那么你可以去:
parse_str($Data["query"],$result);
echo $result["v"];
只会输出视频ID。