Java Regex用可选的尾部斜杠提取子字符串

时间:2016-09-26 09:19:33

标签: java regex

正则表达式:

\/test\/(.*|\/?)

输入

/something/test/{abc}/listed

/something/test/{abc}

预期

两个输入

{abc}

3 个答案:

答案 0 :(得分:0)

这应该适合你:

public static void main(String[] args) {

    String s1 = "/something/test/{abc}/listed";
    String s2 = "/something/test/{abc}";

    System.out.println(s1.replaceAll("[^{]+(\\{\\w+\\}).*", "$1"));
    System.out.println(s2.replaceAll("[^{]+(\\{\\w+\\}).*", "$1"));
}

O / P:

{abc}
{abc}

答案 1 :(得分:0)

您需要在/之后捕获/test/以外的所有字符:

String s = "/something/test/{abc}/listed";
Pattern pattern = Pattern.compile("/test/([^/]+)"); // or "/test/\\{([^/}]+)"
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

请参阅the online demo

详细

  • /test/ - 匹配/test/
  • ([^/]+) - 匹配并捕获到组1中一个或多个(+)(但尽可能多,因为+是贪婪的)其他字符比/(由于否定的字符类[^/])。

请注意,在Java正则表达式模式中,您不需要转义/,因为它不是特殊字符,并且不需要正则表达式分隔符。

答案 2 :(得分:0)

正则表达式(作为Java字符串,即带有双倍反斜杠):

".*\\/test\\/([^/]*).*"