Java正则表达式提取带有可选尾部斜杠的子字符串
正则表达式: 输入 期望Java正则表达式提取带有可选尾部斜杠的子字符串,java,regex,Java,Regex,正则表达式: 输入 期望 {abc}对于这两个输入这应该适用于您: /something/test/{abc}/listed /something/test/{abc} O/p: 在/test/之后,您需要捕获除/以外的所有字符: {abc} {abc} 看 详情: /test/-匹配/test/ ([^/]+)-匹配并捕获到组1中的一个或多个(+)(但尽可能多,因为+是贪婪的)字符,而不是/(由于否定字符类[^/]) 请注意,在Java正则表达式模式中,您不需要转义/,因为它不是特殊
{abc}
对于这两个输入这应该适用于您:
/something/test/{abc}/listed
/something/test/{abc}
O/p:
在
/test/
之后,您需要捕获除/
以外的所有字符:
{abc}
{abc}
看
详情:
-匹配/test/
/test/
-匹配并捕获到组1中的一个或多个(([^/]+)
)(但尽可能多,因为+
是贪婪的)字符,而不是+
(由于否定字符类/
)[^/]
/
,因为它不是特殊字符,不需要正则表达式分隔符。regex(作为Java字符串,即带有双反斜杠):
你想匹配还是提取?我想提取子字符串。,。也许吧?@WiktorStribiżew你的答案是最好的。。非常简单,符合所有发生的情况。。非常感谢..事实上,你应该问得更清楚一些,我们不能确切地知道你一直只想要{abc},或者想要括号中的字符串“{”和“}”以及括号中的字符串这项工作。。但是你能在结果中包含{}括号吗?所以我得到{abc}作为输出。谢谢。我需要得到/测试/和可选/简单和最好的解决方案之间的所有内容。。感谢@Wiktor StribiżewOne,现在如果我想用replaceAll替换结果{abc},那么它也会替换/test。。为什么会这样?不,如果您需要更换,您应该捕获您需要保留的零件,并匹配您需要更换的零件。因此,请尝试
s.replaceFirst((/test/)[^/]+“,“$1”)
(我假设只有1个值需要替换,因此,请使用.replaceFirst
而不是replaceAll
)。谢谢。。我想做的是掩盖这个结果。。所以输出看起来像/something/test/*****/listed或/something/test/*****
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"));
}
{abc}
{abc}
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\\/([^/]*).*"