我希望有人帮我纠正我的正则表达式来拆分这个字符串:
{constraint.null.invalid}{0,1,2}
基本上,我想要{
和}
内的任何内容,所以我的输出必须是:
constraint.null.invalid
0,1,2
。我的正则表达式,我已经仔细考虑过:
\{([\S]+)\}
但我得到的价值是:
constraint.null.invalid}{0,1,2
我错过了什么?
示例代码:
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\{([\\S]+)\\}", Pattern.MULTILINE);
String test = "{constraint.null.invalid}{0,1,2}";
Matcher matcher = pattern.matcher(test);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
由于
PS:该字符串可以包含由1个或多个{
和}
限定的值。
答案 0 :(得分:4)
+
量词是贪婪的。使用+?
作为不情愿的版本。
有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/essential/regex/quant.html。
答案 1 :(得分:2)
一种不同的方法,使用此模式“\ {([^ \ {\}] *)\}”
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReTest {
/**
* @param args
*/
public static void main(String[] args) {
String s = "bla bla {constraint.null.invalid} bla bla bla {0,1,2} bla bla";
Pattern p = Pattern.compile("\\{([^\\{\\}]*)\\}");
Matcher m = p.matcher(s);
while (m.find()){
System.out.println(m.group(1));
}
}
}