捕获 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+))
正则表达式结果应如下所示:
您可以将以下正则表达式与 preg_match_all
一起使用:
'~(?<HEADER>#EXTM3U|\G(?!\A))\R\K#EXTINF:(?<DURATION>-?\d+\.?\d+),(?<TITLE>.+)?\R(?<URI>\S+)~'
详情'
(?<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
组。
如果 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+))
正则表达式结果应如下所示:
您可以将以下正则表达式与 preg_match_all
一起使用:
'~(?<HEADER>#EXTM3U|\G(?!\A))\R\K#EXTINF:(?<DURATION>-?\d+\.?\d+),(?<TITLE>.+)?\R(?<URI>\S+)~'
详情'
(?<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
组。