Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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_String - Fatal编程技术网

仅在Java字符串中首次找到字符之前捕获的正则表达式

仅在Java字符串中首次找到字符之前捕获的正则表达式,java,regex,string,Java,Regex,String,这段代码 String Str = new String("${project_loc:A}/Foo.yaml;${project_loc:B}/Bar.yaml"); System.out.println(Str.replaceFirst("[$][{].*[}]/", "")); 印刷品 Bar.yaml 而我正在努力实现的是: Foo.yaml;${project_loc:B}/Bar.yaml 为什么它停在第二个大括号处,即},而不是一开始 什么正则表达式可以传递给replaceF

这段代码

String Str = new String("${project_loc:A}/Foo.yaml;${project_loc:B}/Bar.yaml");
System.out.println(Str.replaceFirst("[$][{].*[}]/", ""));
印刷品

Bar.yaml
而我正在努力实现的是:

Foo.yaml;${project_loc:B}/Bar.yaml
为什么它停在第二个大括号处,即
}
,而不是一开始

什么正则表达式可以传递给
replaceFirst()
以获得所需的结果


仅供参考:我在尝试了几件事,但都没有成功。

点星号
*
将消耗一切,包括它能找到的所有
}
s;使用
[^}]*
在第一个
}
处停止:

System.out.println(Str.replaceFirst("[$][{][^}]*[}]/", ""));

您还可以使用不情愿的量词
*?

System.out.println(Str.replaceFirst("[$][{].*?[}]/", ""));

使用
\\$\{.[^}]*}/
搜索正则表达式,因为
*
是greedUse:System.out.println(Str.replaceFirst(“[$][{].[}]/”,“”))。额外的?使表达式不贪婪。否则默认情况下正则表达式模式是贪婪匹配