我有一个字符串,它是特定文件的URL位置。该字符串如下所示:

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


我想获得n次出现字符/后的内容。例如,从上面的字符串中,我想要:

mn/src/main/resources


内容出现在/的8次之后,最后一次出现的/。我在正则表达式中经历了一些例子,例如X{n},其中使用X可以检索并给出n次出现的group(),但是在我的情况下,字符/是随机的,需要获取内容。

最佳答案

像这样的模式捕获从第八个斜杠到最后一个斜杠的第一组的所有内容:

(?:[^/]*/){8}(.*)/[^/]*


(?:[^/]*/)是零个或多个非斜杠后跟一个斜杠的序列。 (?:…)是一个非捕获组,因为我们不在乎该文本。 {8}表示获得其中的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'

关于java - 需要一个正则表达式来提取字符串的子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21886090/

10-12 17:42
查看更多