我在正则表达方面并不是那么出色,所以我一直在寻找帮助。
我需要的是拉出封装在双花括号{{}}中的任何字符串。例如,我有一个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的样本,但可能有任何数字,甚至根本没有。
答案 0 :(得分:2)
String regex = "\\{\\{.*?\\}\\}";
请注意?
之后的.*
。这使得它不贪婪。目前正在发生的是你的正则表达式找到第一个{{
,然后所有通往最后 }}
,因为它是“贪婪“。
答案 1 :(得分:1)
你可以使用像这样的特殊字符类而不是点:
String regex = "\\{\\{[^}]*+\\}\\}";
换句话说,[^}]
表示除}
或者你可以使用延迟量词,但性能较差:
String regex = "\\{\\{.*?\\}\\}";
并且您必须以单线模式工作。