使用正则表达式获取视频 URL 当前过期时间和令牌
Get video URL with regex for current expire time and token
我正在尝试从页面获取当前视频 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参数的顺序是这样的,您可以在第一个等号之后的部分使用捕获组,在第二个等号之后使用单个捕获组:
http\S*?\.mp4\?[a-zA-Z]+=([0-9]+)&[a-zA-Z]+=([0-9a-z]+)
看到一个regex demo。
例如
$html = "http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0";
preg_match_all('/http\S*?\.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
标志的命名捕获组。
http\S*?\.mp4\?(?:expire=(?P<expire>[0-9]+)&token=(?P<token>[0-9a-z]+)|token=(?P<token>[0-9a-z]+)&expire=(?P<expire>[0-9]+))
看到一个php demo。
请注意,使用 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
)