如何通过单个正则表达式分组1按条件匹配提取两类URL目标内容
单正则统一提取方案
原有正则问题
原正则^.[i,na,fm,d]+\/(.+([,\/])?(\/|.+=.+,\/).+\/[,](live.([^,]).).+_)?.+(640).*$失效核心原因有三点:
- 强制要求匹配
live相关片段,第一类点播流路径无live标识,直接导致整体匹配失败 - 字符类写法错误,
[i,na,fm,d]实际匹配单字符i、,、n、a、f、m、d,无法正确匹配/i/、/na/这类预期的路径前缀 - 冗余匹配规则过多,容错性差
优化后正则
直接使用以下正则,分组1即可同时提取两类字符串的目标内容:
^/[a-z]+/(.+?(?=\/,640|_[a-zA-Z]+_640))
匹配逻辑说明
^/[a-z]+/:匹配开头的路径前缀,兼容/i/、/na/、/fm/、/d/等各类字母开头的一级路径(.+?):非贪婪模式捕获目标内容,匹配到终止标记立刻停止(?=\/,640|_[a-zA-Z]+_640):正向零宽预查,定义两类终止边界,不占用匹配字符:- 对第一类点播串:遇到
/,640(UUID后的分辨率分隔符)就停止捕获,最终拿到完整UUID路径段 - 对第二类直播串:遇到
_<字母串>_640(时间戳后的业务名+分辨率起始位)就停止捕获,最终拿到日期路径+直播流时间戳前缀段
- 对第一类点播串:遇到
验证结果
两类测试串匹配后分组1输出完全符合预期,无额外冗余字符,不需要编写多分支判断即可覆盖两类场景。
内容的提问来源于stack exchange,提问作者TilakVarisetty
相关产品推荐
相关产品推荐

