正则表达式只捕获直到第一次找到Java字符串中的字符串

时间:2018-01-25 10:53:39

标签: 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

为什么它会在第二次结束时停止,即},而不是一开始?

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

仅供参考:我在https://regex101.com/尝试了一些事情,但未找到任何成功。

1 个答案:

答案 0 :(得分:3)

Dot-asterisk .*将消耗所有内容,包括尽可能多的} s;使用[^}]*代替第一个}

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

Demo 1.

你也可以使用不情愿的量词.*?

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

Demo 2.