Java正则表达式-在一个输出字符串中匹配多个URL
我有这个字符串:Java正则表达式-在一个输出字符串中匹配多个URL,java,regex,Java,Regex,我有这个字符串: jwplayer("vplayer").setup({sources:[{file:"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmtbfbdks3bqofp5s6incq/v.mp4",label:"720p"},{file:"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmt2xbbks3bqofaojtzsgq/v.mp4"
jwplayer("vplayer").setup({sources:[{file:"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmtbfbdks3bqofp5s6incq/v.mp4",label:"720p"},{file:"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmt2xbbks3bqofaojtzsgq/v.mp4",label:"360p"}],image:"https://v5.vidhd.net/i/01/00007/vdachffyt692.jpg"
我只想获取两个URL,即文件:
之后的URL。
所需的输出字符串
应如下所示:
https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmtbfbdks3bqofp5s6incq/v.mp4, https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmt2xbbks3bqofaojtzsgq/v.mp4
我怎样才能在java中得到这个
我尝试过这个正则表达式:“file:\”(.*)\”
,但即使我将matcher.find()
放在while循环中,也只得到了第一个url。
编辑:
这个正则表达式与@azro答案中的正则表达式同样适用。我的问题是while循环中的一些代码在一次迭代后抛出错误并停止循环(多亏了@pafau_k)。
很抱歉给您带来不便。要获取URL,请使用类似此文件的简单正则表达式:“(https.*?”)将起作用,
*?
意味着尽可能少的URL,以便在第一次引用后停止
String content = "jwplayer(\"vplayer\").setup({sources:[{file:\"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmtbfbdks3bqofp5s6incq/v.mp4\",label:\"720p\"},{file:\"https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmt2xbbks3bqofaojtzsgq/v.mp4\",label:\"360p\"}],image:\"https://v5.vidhd.net/i/01/00007/vdachffyt692.jpg\"";
Matcher m = Pattern.compile("file:\"(http.*?)\"").matcher(content);
while(m.find())
System.out.println(m.group(1));
要同时收集的流版本
String res = Pattern.compile("file:\"(http.*?)\"")
.matcher(content)
.results()
.map(r -> r.group(1))
.collect(Collectors.joining(" "));
System.out.println(res); // https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmtbfbdks3bqofp5s6incq/v.mp4 https://v5.vidhd.net/kmxsus4zpjumwmesrlwey575ndnsv4xwfgemw6pmt2xbbks3bqofaojtzsgq/v.mp4
你尝试过什么?当你手头有一个json时,也许只是解析json?这是一件事,另一件事:到目前为止你都尝试了什么?你被困在哪里?你至少试过了吗?我试过这个正则表达式:“file:\”(.*)\”,但我只得到了第一个url,即使我将matcher.find()放在while循环中。这是一个很好的正则表达式(甚至比答案中的正则表达式更好,因为它还可以找到https协议以外的内容)。它对我来说是正确的,也许把你的代码和循环一起发布(编辑问题),这样我们就可以发现错误了?或者从azro的答案中复制while循环,这应该可以很好地工作。Yiu说想要文件后面的URL:但后面是引号“,这是URL的一部分吗?URL验证是什么需要?看起来不是这样。试试findall things
(?