0

正規表現を使用して文字列から 2 つの小数を取得したいのですが、最初の 1 つしか取得できません。

getGroupCountは正しいですが、私はいつも取得{1}し、理由がわかりません。GWT 2.5 を使用しています。これが私のコードです:

private void readOffset(){
    RegExp regExp = RegExp.compile("(\\{\\d\\})");

    MatchResult matcher = regExp.exec("(cast({1} as float)/{24})");

    String val1 = matcher.getGroup(0);
    String val2 = matcher.getGroup(1);
}

なぜこれが起こっているのでしょうか?

4

3 に答える 3

1

演算子\dは 1 桁のみを生成します。2 つ取得する場合は、 を使用する必要があります\d{2}。さらに一致させる必要がある場合は\d+、 を使用する必要があります。ここで、+は の 1 回以上の繰り返しを意味します。

そのようなものは私にとってはうまくいきました(Javaですが、正確にはGWTではありません):

        String str = "(cast({1} as float)/{24})";
        Pattern p = Pattern.compile("(\\{\\d+\\})");
        Matcher m = p.matcher(str);         
        while(m.find())
        {
            System.out.println(m.group(1));
        }

利回り:{1}{24}

于 2013-01-09T10:46:42.020 に答える
0

GWT クライアント側で Regex を使用する方法を学習するには、GWT の Regex のユニット テスト ケースを参照してください。リファレンス -正規表現の GWT 単体テスト

また、 com.google.gwt.regexp.sharedの RegExp と MatchResult を使用する必要があります。

于 2013-01-09T11:20:57.237 に答える
0

私は正規表現をバカにするので、素早く汚いものを解決しました:

private void readOffset(){
    String offset = manager.get("offset");

    String v1 = offset.substring(offset.indexOf("{")+1, offset.indexOf("}"));
    String v2 = offset.substring(offset.lastIndexOf("{")+1, offset.lastIndexOf("}"));

    multiplikator.setValue(v1);
    divisor.setValue(v2);

    /*
    RegExp regExp = RegExp.compile(".*({\\d+}).*", "g");
    MatchResult matcher = regExp.exec(offset);
    boolean matchFound = (matcher != null);

    if(matchFound == true && matcher.getGroupCount() == 2){
        String val1 = matcher.getGroup(0);
        String val2 = matcher.getGroup(1);

        multiplikator.setValue(matcher.getGroup(0));
        divisor.setValue(matcher.getGroup(1));
    }else{
        multiplikator.setValue("1");
        divisor.setValue("1");
    }
    */
}

より良い解決策を歓迎します:(

于 2013-01-10T07:53:21.013 に答える