捕获标题并继续匹配 - 正则表达式

时间:2017-11-12 18:58:38

标签: regex m3u8

如果标题存在,如何捕获标题#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+))

enter image description here Regex demo

正则表达式结果应如下所示:

enter image description here

1 个答案:

答案 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}}组,其中包含一个或多个非空白字符。