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 に答える