Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式提取带有可选尾部斜杠的子字符串_Java_Regex - Fatal编程技术网

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中的一个或多个(
    +
    )(但尽可能多,因为
    +
    是贪婪的)字符,而不是
    /
    (由于否定字符类
    [^/]
请注意,在Java正则表达式模式中,您不需要转义
/
,因为它不是特殊字符,不需要正则表达式分隔符。

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\\/([^/]*).*"