如何编写正则提取带expire和token参数的完整视频URL
正则提取带expire和token参数的MP4 URL解决方案
你原来的正则存在三个核心问题:
- 语法层面括号未闭合,正则本身无法正常运行
- 对token的字符规则限制过死,你写的规则要求token必须按「数字+字母+数字」的顺序循环,而实际token可以是任意大小写字母和数字的组合
- 没有设置URL匹配边界,要么提前截断要么过度匹配到URL以外的内容
推荐使用以下正则:/https?:\/\/[^"\s<>]+\.mp4\?expire=\d+&token=[a-z0-9]+/i
正则规则说明:
https?:\/\/匹配http或https协议头[^"\s<>]+排除引号、空格、HTML尖括号等不会出现在URL里的字符,确保只匹配完整URL段\.mp4\?精准匹配.mp4后缀加参数起始的问号expire=\d+匹配expire参数和纯数字格式的过期时间&token=[a-z0-9]+匹配token参数和字母数字组合的token值
末尾的i修饰符适配参数名大小写不统一的场景
如果页面里的&符号被转义成了HTML实体&,可以调整正则同时适配两种格式:/https?:\/\/[^"\s<>]+\.mp4\?expire=\d+(?:&|&)token=[a-z0-9]+/i
修改后的完整代码:
$html = file_get_contents("http://www.videos.com/"); preg_match_all( '/https?:\/\/[^"\s<>]+\.mp4\?expire=\d+(?:&|&)token=[a-z0-9]+/i', $html, $posts, PREG_SET_ORDER ); foreach ($posts as $post) { $link = $post[0]; echo $link . PHP_EOL; }
内容的提问来源于stack exchange,提问作者bpy
相关产品推荐
相关产品推荐

