仅在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(“[$][{].[}]/”,“”))。额外的?使表达式不贪婪。否则默认情况下正则表达式模式是贪婪匹配