我希望使用正则表达式从字符串中获取两位小数,但我只得到第一位。
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);
}
为什么会发生这种情况?
答案 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");
}
*/
}
欢迎更好的解决方案:(