我有一个字符串,它是特定文件的URL位置。字符串看起来像:
abc://axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml
我希望在 n 出现字符/
后获取内容。例如,从上面的字符串,我想:
mn/src/main/resources
内容出现在/
的8次出现之后,以及/
的最后一次出现之前。我在正则表达式中经历了一些例如X{n}
的示例,其中{em> n 的X
出现将被检索并使用group()
给出,但在我的情况下是字符{ {1}}是随机的,需要获取内容。
答案 0 :(得分:3)
正则表达式".+://(?:[^/]+/){6}(.*)/[^/]*"
将mn/src/main/resources
作为{1}}
abc://axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml
可以解释为
答案 1 :(得分:0)
这样的模式捕获了第八次斜杠到第一组的最终斜杠后的所有内容:
(?:[^/]*/){8}(.*)/[^/]*
(?:[^/]*/)
是一个零或多个非斜杠的序列,后跟一个斜杠。 (?:…)
是一个非捕获组,因为我们不关心该文本。 {8}
意味着获得其中的八个(因此我们已经看到了八个斜杠)。 (.*)
将文本的其余部分记录到一个组中,直到/[^/]*
(最后的斜杠及其后的所有内容)。例如:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NSlashes {
public static void main(String[] args) {
String string = "abc://axs/abc/def/gh/ij/kl/mn/src/main/resources/xx.xml";
Matcher m = Pattern.compile( "(?:[^/]*/){8}(.*)/[^/]*").matcher( string );
if ( m.matches() ) {
String result = m.group( 1 );
System.out.println( "result: '"+result+"'" );
}
}
}
result: 'mn/src/main/resources'