如何使用正则表达式匹配包含多个网址的行中的最后一个网址?

时间:2010-06-13 12:24:56

标签: regex url

我想编写一个匹配以".mp4"结尾的网址的正则表达式,假设一行中有多个网址。

例如,对于以下行:

"http://www.link.org/1610.jpg","Debt","http://www.archive.org/610_.mp4","66196517"

使用以下模式匹配从第一个httpmp4

(http:\/\/[^"].*?\.mp4)[",].*?

如何才使其仅匹配最后一个网址?

请注意,这些行可能包含任意数量的URL以及介于两者之间的任何内容。但只有最后一个网址包含.mp4个结尾。

2 个答案:

答案 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的结尾而不是现在使用的结尾。