Regex 解析HLS m3u8正则表达式
我正在尝试解析HLS m3u8文件,而我停留在匹配m3u8链接的地方。因此,如果Regex 解析HLS m3u8正则表达式,regex,http-live-streaming,m3u8,Regex,Http Live Streaming,M3u8,我正在尝试解析HLS m3u8文件,而我停留在匹配m3u8链接的地方。因此,如果URI=存在,从#EXT-X-I-FRAME-STREAM-INF中,获取引号中的一个,如果不存在,#EXT-X-STREAM-INF,则从新行获取链接 正文: #EXT-X-STREAM-INF:BANDWIDTH=263851,CODECS=“mp4a.40.2,avc1.4d400d”,分辨率=416x234,AUDIO=“bipbop\u AUDIO”,SUBTITLES=“subs” gear1/prog_
URI=
存在,从#EXT-X-I-FRAME-STREAM-INF
中,获取引号中的一个,如果不存在,#EXT-X-STREAM-INF
,则从新行获取链接
正文:
#EXT-X-STREAM-INF:BANDWIDTH=263851,CODECS=“mp4a.40.2,avc1.4d400d”,分辨率=416x234,AUDIO=“bipbop\u AUDIO”,SUBTITLES=“subs”
gear1/prog_index.m3u8模式的快速修复程序如下所示:
- 将
#EXT-X-STREAM-INF
部分捕获到组1中
- 添加
(?J)
修饰符以允许使用相同名称的命名捕获组
- 如果组1匹配,则添加一个将在当前模式后捕获整行的
这个图案看起来像
(?J)(?:(#EXT-X-STREAM-INF)|#EXT-X-I-FRAME-STREAM-INF):(?:BANDWIDTH=(?<BANDWIDTH>\d+),?|CODECS=(?<CODECS>"[^"]*"),?|RESOLUTION=(?<RESOLUTION>\d+x\d+),?|AUDIO=(?<AUDIO>"[^"]*"),?|SUBTITLES=(?<SUBTITLES>"[^"]*"),?|URI=(?<URI>"[^"]*"),?)*(?<URI>(?:(?!#EXT)\S)+))
(?)(?:(#EXT-X-STREAM-INF)| EXT-X-I-FRAME-STREAM-INF):(?:带宽=(?\d+),|编解码器=(?“[^”]*”,|分辨率=(?\d+X\d+),|音频=(?)
因此,基本上,我在末尾添加了(?(?:(?!#EXT)\S)+
,并在开头捕获了(#EXT-X-STREAM-INF)
条件构造匹配如下所示:
(?
-条件构造的开始
(1)
-如果组1匹配
\R
-换行符
(?
-启动命名捕获组
(?:(?!#EXT)\S)+
-任何非空白字符(\S
),一次或多次出现(++
),这不是\EXT
字符序列(所谓的)的起始字符
)
-命名捕获组的结尾
)
-条件构造的结束
请看,您想要这样的东西吗?匹配一个额外的行并将其捕获到第二个URI
组中(使用(?J)
修饰符)如果第1组中匹配了#EXT-X-STREAM-INF
。@Wiktor Stribiżew你真是超乎上帝!请发一篇帖子,这样我就可以投票并接受它作为答案。你确定你的引擎是PCRE吗?它在实际的当前项目代码中能工作吗?@Wiktor Stribiżew我不知道。我在使用PHP。是的,PHP使用PCRE。我唯一关心的是如果#EXT-X-STREAM-INF和#EXT-X-I-FRAME-STREAM-INF在同一行中.#EXT-X-STREAM-INF:BANDWIDTH=263851…#EXT-X-I-FRAME-STREAM-INF:URI=“gear1/…从“(?(1)\R(?.*)”更改为“(?(1)\R(?[^ EXT s]+)”),它就像一个符咒。再次感谢。@S.Kablar抱歉,我离线了。除了字符序列外,不能使用求反字符类来匹配任何文本。您可以使用一个标记。
(?:#EXT-X-STREAM-INF:|#EXT-X-I-FRAME-STREAM-INF:)(?:BANDWIDTH=(?<BANDWIDTH>\d+),?|CODECS=(?<CODECS>"[^"]*"),?|RESOLUTION=(?<RESOLUTION>\d+x\d+),?|AUDIO=(?<AUDIO>"[^"]*"),?|SUBTITLES=(?<SUBTITLES>"[^"]*"),?|URI=(?<URI>"[^"]*"),?)*
(?J)(?:(#EXT-X-STREAM-INF)|#EXT-X-I-FRAME-STREAM-INF):(?:BANDWIDTH=(?<BANDWIDTH>\d+),?|CODECS=(?<CODECS>"[^"]*"),?|RESOLUTION=(?<RESOLUTION>\d+x\d+),?|AUDIO=(?<AUDIO>"[^"]*"),?|SUBTITLES=(?<SUBTITLES>"[^"]*"),?|URI=(?<URI>"[^"]*"),?)*(?<URI>(?:(?!#EXT)\S)+))