我想编写一个函数来根据正则表达式模式从字符串中提取各种数量的值:
这是我的功能代码:
/**
* Get substrings in a string using groups in regular expression.
*
* @param str
* @param regex
* @return
*/
public static String[] regexMatch(String str, String regex) {
String[] rtn = null;
if (str != null && regex != null) {
Pattern pat = Pattern.compile(regex);
Matcher matcher = pat.matcher(str);
if (matcher.find()) {
int nGroup = matcher.groupCount();
rtn = new String[nGroup];
for (int i = 0; i < nGroup; i++) {
rtn[i] = matcher.group(i);
}
}
}
return rtn;
}
当我使用以下命令进行测试时:
String str = "nets-(90000,5,4).dat";
String regex = "(\\d+),(\\d+),(\\d+)";
String[] rtn = regexMatch(str, regex);
我得到:
rtn: [90000,5,4,90000,5]
我怎样才能像预期的那样将rtn设置为[90000,5,4]?
最佳答案
您的阵列当前存储
[0] -> 90000,5,4
[1] -> 90000
[2] -> 5
这就是为什么您看到输出
[90000,5,4,90000,5]
的原因。这是因为group(0)
代表整个匹配,所以它返回90000,5,4
。您需要的是来自第1、2和3组的比赛。
(\\d+),(\\d+),(\\d+)
1 2 3
所以改变
rtn[i] = matcher.group(i);
至
rtn[i] = matcher.group(i+1);