
在许多应用场景中,视频资源链接通常会包含动态生成的参数,例如过期时间(expire)和访问令牌(token),以实现安全控制和访问限制。一个典型的视频url可能呈现如下格式:
http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0
我们的目标是从包含这类URL的文本内容(如HTML页面)中准确地提取出完整的视频URL,并可能进一步解析其查询参数。
正则表达式是处理字符串模式匹配的强大工具。针对上述特定格式的视频URL,我们可以构建一个精确的正则表达式来捕获整个URL及其关键参数。
一个能够匹配固定顺序参数(expire在前,token在后)的正则表达式如下:
立即学习“PHP免费学习笔记(深入)”;
http\S*?\.mp4\?[a-zA-Z]+=([0-9]+)&[a-zA-Z]+=([0-9a-z]+)
正则表达式解析:
在PHP中,可以使用preg_match_all函数来查找所有匹配给定正则表达式的字符串。
这是一个包含视频链接的页面。
观看视频
@@##@@
另一个视频链接:
";
// 定义正则表达式,注意PHP中需要使用分隔符,如 '/'
$regex = '/http\S*?\.mp4\?[a-zA-Z]+=([0-9]+)&[a-zA-Z]+=([0-9a-z]+)/';
preg_match_all($regex, $htmlContent, $matches, PREG_SET_ORDER);
echo "使用正则表达式提取结果:
";
if (!empty($matches)) {
foreach ($matches as $match) {
echo "完整URL: " . $match[0] . "
";
echo "Expire: " . $match[1] . "
";
echo "Token: " . $match[2] . "
";
}
} else {
echo "未找到匹配的视频URL。\n";
}
?>输出示例:
使用正则表达式提取结果: 完整URL: http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0 Expire: 1635939248 Token: 7022dbc14de970c7uc040ac4f35058f0 完整URL: http://cdn.anothervideo.mp4?expire=1635940000&token=abcdef1234567890abcdef1234567890 Expire: 1635940000 Token: abcdef1234567890abcdef1234567890
PREG_SET_ORDER标志使得$matches数组的每个元素都是一个完整的匹配项,其中$match[0]是完整的匹配字符串,$match[1]和$match[2]分别对应正则表达式中第一个和第二个捕获组的内容(即expire和token的值)。
如果URL中的expire和token参数顺序不固定,可以构建一个更复杂的正则表达式,利用非捕获组和命名捕获组来处理:
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]+))
这个正则表达式使用了|(或)来匹配两种可能的参数顺序,并通过(?P
尽管正则表达式功能强大,但对于解析URL这种结构化的数据,PHP提供了更专业、更健壮的内置函数:parse_url和parse_str。它们能更好地处理URL编码、特殊字符以及参数顺序不确定等复杂情况,且代码可读性更高。
parse_url() 函数可以解析一个URL,并返回其组成部分(如scheme, host, path, query, fragment等)。
parse_str() 函数可以将查询字符串解析到变量中,或者解析到一个数组中。
以下是结合parse_url和parse_str来提取URL参数的示例:
<?php
$videoUrl = "http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0";
// 1. 使用 parse_url 提取查询字符串
$queryString = parse_url($videoUrl, PHP_URL_QUERY);
$params = [];
if ($queryString) {
// 2. 使用 parse_str 将查询字符串解析为数组
parse_str($queryString, $params);
}
echo "<h3>使用 parse_url 和 parse_str 提取结果:</h3>";
if (!empty($params)) {
echo "原始URL: " . $videoUrl . "<br>";
echo "查询参数数组: <pre class="brush:php;toolbar:false;">";
var_dump($params);
echo ""; var_dump($simpleParams); echo "
输出示例:
使用 parse_url 和 parse_str 提取结果:
原始URL: http://cdn.videourl.mp4?expire=1635939248&token=7022dbc14de970c7uc040ac4f35058f0
查询参数数组:
array(2) {
["expire"]=>
string(10) "1635939248"
["token"]=>
string(32) "7022dbc14de970c7uc040ac4f35058f0"
}
Expire: 1635939248
Token: 7022dbc14de970c7uc040ac4f35058f0
处理无参数URL:
原始URL: http://cdn.simplevideo.mp4
查询参数数组:
array(0) {
}在PHP中提取视频URL及其参数时,我们有两种主要策略:
最佳实践建议:
通过合理选择和组合这些工具,你可以高效且可靠地处理PHP中的URL提取和参数解析任务。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号