需要正则表达式来提取字符串的子字符串

时间:2014-04-01 06:01:09

标签: java regex

我有一个字符串,字符串看起来像:

abc/axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml

我想在n次出现之后和出现m字符/之前获取内容。 例如,从上面的字符串,我想:

mn/src/main

请为此提出一些解决方案。

3 个答案:

答案 0 :(得分:1)

你需要的正则表达式是:

(?:.*?\/){7}(.*?)(.*)(?:\/.*?){2}$

通用正则表达式:

(?:.*?\/){n}(.*?)(.*)(?:\/.*?){m}$

用n和m替换7和2,你会得到你的结果

演示:

http://regex101.com/r/bW2yF3

答案 1 :(得分:0)

使用split()

String path = "abc/axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml"
String [] tokens = path.split("/");

现在只需打印出来:

for (int i = n; i < m; i++){
    System.out.print(tokens[i] + (i != m - 1 ? "/" : ""));
}

答案 2 :(得分:0)

如果必须使用正则表达式:

String s = "abc/axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml";
int n = 7;
int m = 10;
Pattern p = Pattern.compile("(?:[^/]*/){" + n + "}((?:[^/]*/){" + (m - n - 1) + "}[^/]*)/.*");
Matcher matcher = p.matcher(s);
if (matcher.matches()) {
  System.out.println(matcher.group(1));
}