在某个模式之后提取子字符串

use*_*969 5 java string split

我有以下字符串:

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到下一个/我想要的.

UVM*_*UVM 6

你可以这样做:

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)


Unt*_*led 4

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)