我有以下URL路径:
我想捕捉不同的片段。包括.mp4
在内的所有内容都相当简单,但在这之后,使用以下子段会变得很棘手:
media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=.abst/Seg1-Frag74
我希望捕捉到这一点,因此我有三个匹配项:
media_u11bgy04l_b282848_qdGltZT0xMzgwMjA0ODMzJnNlc3Npb249MjE2ODcxNzI3NTc=
.abst
/Seg1-Frag74
这个想法是#2可以是不同的格式(它是用于livestreaming的,所以我们有.f4m
和.m3u8
),而#1基本上是我需要跳过的东西。#3是可选的(并不总是存在),因此即使2后面没有任何内容,它也必须匹配。你知道吗
我试过以下方法:(.*?)(\.abst|\.f4m|\.m3u8)?(.*)
但是结果如下(我使用的是python,因此None
):
如果我把它改成如下,(.*)(\.abst|\.f4m|\.m3u8)?(.*)
,我得到:
第二部分是可选的,因为我们希望捕获意外的输入(并抛出一个错误以便进行调查),以防出现格式错误的请求或遗漏的内容(其中不是预先指定的播放列表类型或类似类型)。你知道吗
我对使用非正则表达式的解决方案持开放态度,我只是不确定如何解决这个问题。感谢您的帮助。你知道吗
你也许可以试试。。。你知道吗
[^/]+
也允许您获得不同的扩展。如果你只想得到你提到的那些,就用(\.abst|\.f4m|\.m3u8)
而不是(\.[^/]+)
(不要把?
放回去)正则表达式中的
?
阻止了正确的匹配:这里,在字符串的开始处,
(.*?)
将尝试不匹配,并且(\.abst|\.f4m|\.m3u8)?
也成功地在同一点(即在字符串的开始处)具有匹配(null)。你知道吗在这里,
(.*)
是贪婪的,您将结束在字符串的末尾,并再次尝试匹配(\.abst|\.f4m|\.m3u8)?
以获得匹配(null)。你知道吗不要将第二组设为可选组,也不需要捕获第1组和第3组:
相关问题 更多 >
编程相关推荐