正则表达式:
\/test\/(.*|\/?)
输入
/something/test/{abc}/listed
/something/test/{abc}
预期
两个输入 {abc}
答案 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));
}
详细:
/test/
- 匹配/test/
([^/]+)
- 匹配并捕获到组1中一个或多个(+
)(但尽可能多,因为+
是贪婪的)其他字符比/
(由于否定的字符类[^/]
)。请注意,在Java正则表达式模式中,您不需要转义/
,因为它不是特殊字符,并且不需要正则表达式分隔符。
答案 2 :(得分:0)
正则表达式(作为Java字符串,即带有双倍反斜杠):
".*\\/test\\/([^/]*).*"