1

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

{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 或多个为界的值{}.

4

2 回答 2

4

+量词是贪婪的。用于+?不情愿的版本。

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

于 2012-07-30T13:51:40.033 回答
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));
        }
    }
}
于 2012-07-30T14:02:57.597 回答