匹配字符串中的小数与正则表达式

时间:2013-01-09 10:44:28

标签: regex gwt

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

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

为什么会发生这种情况?

3 个答案:

答案 0 :(得分: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}

答案 1 :(得分:0)

要了解如何在GWT客户端使用Regex,请通过GWT for Regex中的单元测试用例。参考 - GWT Unit Test for Regex

此外,您应该使用 com.google.gwt.regexp.shared 中的RegExp和MatchResult。

答案 2 :(得分: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");
    }
    */
}

欢迎更好的解决方案:(