使用regex获取当前过期时间和令牌的视频URL



我正在尝试从页面获取当前视频URL。视频URL具有expire时间和token,格式为:http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0

这就是我目前所得到的:

$html = file_get_contents("http://www.videos.com/");
preg_match_all('/(http.*mp4?[a-zA-Z]+=[0-9]+&[a-zA-Z]+=([0-9]+([a-zA-Z]+[0-9]+)+)',
$html,
$posts, // will contain the article data
PREG_SET_ORDER // formats data into an array of posts
);
foreach ($posts as $post) {
$link = $post[0];
echo $link;
}

有了这个正则表达式/(http.*mp4(.*?))/,我可以获得url,直到.mp4

我的正则表达式中缺少什么来获得完整的URL?我也试过这个(但我觉得少了一些…(:/(http.*mp4?[a-zA-Z]+=[0-9]+&[a-zA-Z]+=([0-9]+([a-zA-Z]+[0-9]+)+)

在php示例中,正则表达式在模式开头包含一个未闭合的括号。preg_match_all中的模式也缺少分隔符

假设querystring参数的顺序是这样的,您可以为第一个等号后的部分使用一个捕获组,并在第二个等号后使用一个单独的捕获组:

httpS*?.mp4?[a-zA-Z]+=([0-9]+)&[a-zA-Z]+=([0-9a-z]+)

请参阅regex演示。

例如

$html = "http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0";
preg_match_all('/httpS*?.mp4?[a-zA-Z]+=([0-9]+)&[a-zA-Z]+=([0-9a-z]+)/',
$html,
$posts, // will contain the article data
PREG_SET_ORDER // formats data into an array of posts
);
var_export($posts);

输出

array (
0 => 
array (
0 => 'http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0',
1 => '1635939248',
2 => '7022dbc14de970c7uc040ac4f35058f0',
),
)

如果参数的顺序不固定,也可以使用具有相同名称和J标志的命名捕获组。

httpS*?.mp4?(?:expire=(?P<expire>[0-9]+)&token=(?P<token>[0-9a-z]+)|token=(?P<token>[0-9a-z]+)&expire=(?P<expire>[0-9]+))

请参阅php演示。


请注意,使用parse_url可能更容易获得键值对。

例如

parse_str(parse_url($html, PHP_URL_QUERY), $result);
var_dump($result);

输出

array(2) {
["expire"]=>
string(10) "1635939248"
["token"]=>
string(32) "7022dbc14de970c7uc040ac4f35058f0"
}

您可以使用内置函数:

<?php
$url = "http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0";
// parts
$parts = parse_url($url);
print_r($parts);
// query
parse_str($parts["query"], $query);
print_r($query);
?>

这产生

Array
(
[scheme] => http
[host] => cdn.videourl.mp4
[query] => expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0
)
Array
(
[expire] => 1635939248
[token] => 7022dbc14de970c7uc040ac4f35058f0
)

请参阅videone.com.上的演示

最新更新