我想编写一个匹配以".mp4"
结尾的网址的正则表达式,假设一行中有多个网址。
例如,对于以下行:
"http://www.link.org/1610.jpg","Debt","http://www.archive.org/610_.mp4","66196517"
使用以下模式匹配从第一个http
到mp4
。
(http:\/\/[^"].*?\.mp4)[",].*?
如何才使其仅匹配最后一个网址?
请注意,这些行可能包含任意数量的URL以及介于两者之间的任何内容。但只有最后一个网址包含.mp4
个结尾。
答案 0 :(得分:3)
使用:
.*"(http:\/\/[^"].*?\.mp4)".*
通配符默认为 greedy 。第一部分将首先抓取整个字符串,然后回溯直到找到一个URL。可能不是最有效的方法,但它并不重要,因为你只是在一行文本上这样做(除非,例如,该行长达数千万字符)。
顺便说一句,你最后的那篇文章([",]
)并不完全正确。当我怀疑你的真实含义与该序列匹配时(基于你的样本行),该模式意味着匹配"
或,
。
最后,您不需要使最终的通配符变得贪婪。如果您正在进行查找而不是尝试匹配整条线路,则根本不需要它。
答案 1 :(得分:0)
尝试
,\s*"(http://[^"]*?\.mp4)"\s*,\s*.*$
(PCRE不使用/作为分隔符,例如使用|代替);如果“打开并关闭链接,即不允许http://www.archive.org/610_.mp4
,它匹配" link "
;否则,添加\ s *?以匹配这些空格。另一个可能是错误的假设:链接是最后一个link,但不是最后一个元素;如果不是,mp4)"$
可能是RE的结尾而不是现在使用的结尾。