0

我想使用正则表达式从字符串中获取两位小数,但我只得到第一个。

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 位数字。如果要获得两个,则需要使用\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 for 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 回答