0

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

我正在尝试解析M3U 文件,我需要匹配前一行以#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

我已经尝试过这个答案的变化和这个:(?#EXT.*\n)但没有运气......

4

1 回答 1

0

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

然后你需要指定一个lookbehind:

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

如果您的正则表达式实现不支持后视或后视内的重复,则可以使用两个捕获组:

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

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

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

于 2013-12-17T11:56:23.093 回答