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

Capturing header and continue matching - Regex

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

Regex demo

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

您可以将以下正则表达式与 preg_match_all 一起使用:

'~(?<HEADER>#EXTM3U|\G(?!\A))\R\K#EXTINF:(?<DURATION>-?\d+\.?\d+),(?<TITLE>.+)?\R(?<URI>\S+)~'

regex demo

详情'

  • (?<HEADER>#EXTM3U|\G(?!\A)) - HEADER 组匹配 #EXTM3U 或上一场比赛的结尾 (\G(?!\A))
  • \R - 一个换行符
  • \K - 匹配重置运算符丢弃目前匹配的文本
  • #EXTINF: - 一个子字符串
  • (?<DURATION>-?\d+\.?\d+) - DURATION 组匹配一个可选的 -,1+ 个数字,一个可选的 .,然后是 1+ 个数字
  • , - 逗号
  • (?<TITLE>.+)? - 一个可选的 TITLE 组匹配除换行符以外的 1+ 个字符,尽可能多
  • \R - 一个换行符
  • (?<URI>\S+) - 匹配 1 个或多个非空白字符的 URI 组。