You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则表达式如何提取包含index_5_av.m3u8的特定链接?

如何提取包含index_5_av.m3u8的特定链接?

你现在遇到的问题是用preg_match只能拿到第一个链接,没办法精准定位到包含index_5_av.m3u8的目标链接。核心问题在于之前的正则表达式没有针对目标文件名做匹配,只是泛泛地截取了第一个符合sns(...)的片段。

这里给你调整后的解决方案,直接用精准匹配的正则来定位目标链接:

$data = "#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=241000,RESOLUTION=320x180,CODECS=\"avc1.66.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_1_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=461000,RESOLUTION=416x234,CODECS=\"avc1.66.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_2_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=861000,RESOLUTION=640x360,CODECS=\"avc1.66.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_3_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1361000,RESOLUTION=720x404,CODECS=\"avc1.66.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_4_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2061000,RESOLUTION=1280x720,CODECS=\"avc1.77.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_5_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3062000,RESOLUTION=1600x900,CODECS=\"avc1.77.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_6_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4561000,RESOLUTION=1920x1080,CODECS=\"avc1.77.30, mp4a.40.2\",CLOSED-CAPTIONS=NONE https://staragvod1-vh.akamaihd.net/i/videos/plus/sns/1364/1000055235_,16,180,400,800,1300,2000,3000,4500,_STAR.mp4.csmil/index_7_av.m3u8?null=0&id=AgBwxF67ZwMhBu+3XVrS4UWCkUpXl1hGzzRVtOIGbC4tLT5KmX0zX6fB0Z5qlHfurL7v7kKGtVdEJA%3d%3d";

// 调整后的正则,精准匹配包含index_5_av.m3u8的完整链接
$re = '/https?:\/\/[^\s]+index_5_av\.m3u8[^\s]*/';
preg_match($re, $data, $matches);

// 输出结果,增加判断避免无匹配时报错
if (!empty($matches[0])) {
    echo $matches[0];
} else {
    echo "未找到包含index_5_av.m3u8的链接";
}

正则表达式说明:

  • https?:\/\/:匹配http://或https://开头的链接
  • [^\s]+:匹配任意非空白字符,直到遇到index_5_av.m3u8
  • index_5_av\.m3u8:精准匹配目标文件名,注意点号.需要转义,否则会匹配任意字符
  • [^\s]*:匹配链接后面的查询参数部分,直到下一个空白字符结束

之前的正则/sns([^(]+?)\s/之所以只拿到第一个链接,是因为它只会匹配第一个sns后到第一个空格的内容,没有针对特定文件名做筛选,所以无法定位到你需要的那个链接。

内容的提问来源于stack exchange,提问作者waylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:49