如果标题存在,如何捕获标题#EXTM3U
并继续匹配#EXTINF
模式。
#EXTM3U
#EXTINF:10.0,
media_w854021192_21533.ts
#EXTINF:10.0,
media_w854021192_21534.ts
#EXTINF:10.0,
media_w854021192_21535.ts
正则表达式:
(?<HEADER>#EXTM3U)\r?\n(?:#EXTINF:(?<DURATION>\-?\d+\.?\d+),(?<TITLE>.+)?\r?\n(?<URI>\S+))
正则表达式结果应如下所示:
答案 0 :(得分:1)
您可以将以下正则表达式与preg_match_all
:
'~(?<HEADER>#EXTM3U|\G(?!\A))\R\K#EXTINF:(?<DURATION>-?\d+\.?\d+),(?<TITLE>.+)?\R(?<URI>\S+)~'
请参阅regex demo
<强>详情&#39;
(?<HEADER>#EXTM3U|\G(?!\A))
- HEADER
组匹配#EXTM3U
或上一场比赛结束(\G(?!\A)
)\R
- 换行符\K
- 匹配重置操作符,丢弃目前为止匹配的文本#EXTINF:
- 子字符串(?<DURATION>-?\d+\.?\d+)
- DURATION
组匹配可选的-
,1 +位数,可选.
然后1+位数,
- 逗号(?<TITLE>.+)?
- 一个可选的TITLE
组,其中包含除了换行符之外的1个字符,尽可能多\R
- 换行符(?<URI>\S+)
- 一个{1}}组,其中包含一个或多个非空白字符。