我有以下字符串:
http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true
Run Code Online (Sandbox Code Playgroud)
如何在之后提取零件30/?在这种情况下,它是32531a5d-b0b1-4a8b-9029-b48f0eb40a34.我有另一个字符串具有相同的部分高达30 /并且之后每个字符串具有不同的id到下一个/我想要的.
你可以这样做:
String s = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true";
System.out.println(s.substring(s.indexOf("30/")+3, s.length()));
Run Code Online (Sandbox Code Playgroud)
split在这种情况下,类的函数String不会为您提供帮助,因为它会丢弃分隔符,而这不是我们想要的。你需要制作一个向后看的图案。语法背后的外观是:
(?<=X)Y
Run Code Online (Sandbox Code Playgroud)
它标识Y前面带有 的任何内容X。
所以在你的情况下你需要这种模式:
(?<=30/).*
Run Code Online (Sandbox Code Playgroud)
编译模式,将其与您的输入进行匹配,找到匹配项并捕获它:
String input = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true";
Matcher matcher = Pattern.compile("(?<=30/).*").matcher(input);
matcher.find();
System.out.println(matcher.group());
Run Code Online (Sandbox Code Playgroud)