0

我不是很擅长正则表达式,所以我一直在寻找一些帮助。

我需要的是拉出封装在双花括号 {{ }} 中的任何字符串。例如,我有一个 String 值,如下所示:

String text = "This is my sample {{text1}} text {{text2}}.";

这是我的正则表达式:

String regex = "\\{\\{.*\\}\\}";

这就是我对代码所做的:

Pattern p = Pattern.compile(regex);
Matcher match = p.matcher(text);
while (match.find()) {
    System.out.println(match.group());
}

我需要的输出是:

{{text1}}
{{text2}}

但我认为正则表达式正在查找和定位字符串值的两端,因为它返回给我的是这个:

{{text1}} text {{text2}}

当我打印出价值时。我应该如何调整我的正则表达式来捕获我需要的东西?

另外,我不知道在任何给定的字符串中会有多少 {{texts}},这是一个有 2 的示例,但可能有任何数字,甚至可能根本没有。

4

2 回答 2

2
String regex = "\\{\\{.*?\\}\\}";

注意. ?_ .*这使它不贪婪。当前发生的情况是您的正则表达式正在找到第一个{{,然后一直最后一个 }},因为它是“贪婪的”。

于 2013-07-10T02:43:57.717 回答
1

您可以使用这样的特殊字符类而不是点:

String regex = "\\{\\{[^}]*+\\}\\}";

换句话说[^}],意味着所有字符,但}

或者您可以使用惰性量词,但性能较差:

String regex = "\\{\\{.*?\\}\\}";

并且您必须在单行模式下工作。

于 2013-07-10T02:42:32.700 回答