正则表达式基于模式拆分字符串

时间:2012-07-30 13:49:21

标签: java regex string

我希望有人帮我纠正我的正则表达式来拆分这个字符串:

{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个或多个{}限定的值。

2 个答案:

答案 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));
        }
    }
}