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

匹配指定.ts文件最近的EXT-X-PROGRAM-DATE-TIME正则表达式需求

解决方案:匹配HLS播放列表中指定TS文件对应的最近时间标签

首先给出示例HLS播放列表:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-PROGRAM-DATE-TIME:2022-09-12T10:03:22.621+02:00
#EXTINF:6.666666667,
seg1.ts
#EXT-X-PROGRAM-DATE-TIME:2022-09-12T10:03:29.637+02:00
#EXTINF:6.666666667,
seg2.ts
#EXT-X-PROGRAM-DATE-TIME:2022-09-12T10:03:36.583+02:00
#EXTINF:6.666666666,
seg3.ts

问题分析

你之前的正则EXT-X-PROGRAM-DATE-TIME:(.*)[\s\S]*?seg2.ts会匹配第一个时间标签,因为它从开头找到第一个EXT-X-PROGRAM-DATE-TIME后,就会匹配任意内容直到目标文件名,无法跳过前面的标签。要解决这个问题,核心是确保匹配的时间标签和目标文件名之间不再出现其他EXT-X-PROGRAM-DATE-TIME标签。

正确正则表达式

针对seg2.ts的正则:

EXT-X-PROGRAM-DATE-TIME:(.*?)(?:(?!EXT-X-PROGRAM-DATE-TIME)[\s\S])*?seg2\.ts

正则拆解

  • EXT-X-PROGRAM-DATE-TIME:(.*?):匹配时间标签,并用非贪婪模式捕获时间值,避免过度匹配后续内容
  • (?:(?!EXT-X-PROGRAM-DATE-TIME)[\s\S])*?:非捕获组,匹配任意字符(包括换行),但通过负前瞻(?!EXT-X-PROGRAM-DATE-TIME)确保中间不会出现新的时间标签,这样就能锁定目标文件之前最近的那个时间标签
  • seg2\.ts:匹配目标文件名,转义.避免匹配任意字符

适配说明

如果要匹配其他TS文件,只需将seg2\.ts替换为对应的文件名即可,比如匹配seg3.ts就改成seg3\.ts。这个正则完全兼容未来在文件名和时间标签之间新增其他HLS标签的场景,只要新增的标签不是EXT-X-PROGRAM-DATE-TIME就不会影响匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:46:33