正则表达式:如果上一行符合条件,则匹配行

时间:2013-12-17 11:53:43

标签: objective-c regex m3u8

什么是正则表达式,它匹配前一行以一组字符开头的行?

我正在尝试解析M3U files,我需要匹配前一行以#EXTINF:开头的行。所以如果我们采用这个例子:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:11.54
ASMIK_tid_0000250058_m.600000-00000.ts
#EXTINF:8.51
ASMIK_tid_0000250058_m.600000-00001.ts
#EXTINF:11.76
ASMIK_tid_0000250058_m.600000-00002.ts
#EXTINF:10.05
ASMIK_tid_0000250058_m.600000-00003.ts
etc...

我只想提取这些行:

ASMIK_tid_0000250058_m.600000-00000.ts
ASMIK_tid_0000250058_m.600000-00001.ts
ASMIK_tid_0000250058_m.600000-00002.ts
ASMIK_tid_0000250058_m.600000-00003.ts

我尝试了this answer(?#EXT.*\n)的变体,但没有运气......

1 个答案:

答案 0 :(得分:0)

首先,您必须确保您使用的功能是匹配整个文件而不是逐行匹配,否则这是不可能的。

然后你需要指定一个lookbehind:

(?<=#EXTINF.*\r\n).*

如果你的正则表达式实现不支持lookbehinds或在lookbehind中重复,你可以使用两个捕获组:

(#EXTINF.*\r\n)(.*)

显然,您只需忽略第一个捕获组,但将所有数据保留在第二个捕获组中。

如果您需要手动指定.与换行符不匹配,可以在正则表达式的开头指定模式:(?-s)