Java Regex调整

时间:2013-07-10 02:40:48

标签: java regex

我在正则表达方面并不是那么出色,所以我一直在寻找帮助。

我需要的是拉出封装在双花括号{{}}中的任何字符串。例如,我有一个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}}

但是我认为正则表达式是找到并找到String值的两端,因为它返回了我:

{{text1}} text {{text2}}

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

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

2 个答案:

答案 0 :(得分:2)

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

请注意?之后的.*。这使得它不贪婪。目前正在发生的是你的正则表达式找到第一个{{,然后所有通往最后 }},因为它是“贪婪“。

答案 1 :(得分:1)

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

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

换句话说,[^}]表示除}

之外的所有字符

或者你可以使用延迟量词,但性能较差:

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

并且您必须以单线模式工作。