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