我有以下正则表达式模式:^(\d+)(;(\d+))*$.我想获得该正则表达式中的组数和每个组的值.
我尝试使用groupCount和group但是得到以下结果:
Input: "1"
Groups: 3
"1", "1", null, null
Input: "1;2"
Groups: 3
"1;2", "1", ";2", "2"
Input: "1;2;3"
Groups: 3
"1;2;3", "1", ";3", "3"
Input: "1;2;3;4"
Groups: 3
"1;2;3;4", "1", ";4", "4"
Run Code Online (Sandbox Code Playgroud)
我期待第一个"1"从groupCount获得1.在最后一次的情况下"1;2;3;4",我期待从groupCount获得7.
Matcher上有什么方法可以返回我期待的内容吗?
编辑:添加了生成上述输出的代码
String input = "1";
Pattern pattern = Pattern.compile("^(\\d+)(;(\\d+))*$");
for (int i = 2; i < 6; ++i) {
Matcher matcher = pattern.matcher(input);
matcher.matches();
System.out.println("Input: \"" + input + "\"\nGroups: " + matcher.groupCount());
for (int group = 0; group <= matcher.groupCount(); ++group) {
System.out.print("\"" + matcher.group(group) + "\", ");
}
System.out.println();
input += ";" + i;
}
Run Code Online (Sandbox Code Playgroud)
对不起,但是你们对团体存在误解.
您可以使用正则表达式定义组的数量.它不依赖于字符串.在你的正则表达式中,你定义了3组:
^(\\d+)(;(\\d+))*$
1 2 3
Run Code Online (Sandbox Code Playgroud)
各组用左括号编号.所以你的正则表达式总是有3组.如果他们匹配的东西是完全不同的东西.
因此,在第一组中总会有第一个找到的数字.对于其他两组,您正在做一些特别的事情:您正在重复捕获组.
由于您匹配的以下数字都存储在第3组中,因此您只能在最终结果中找到最后一个数字.在.net中你可以读出所有的匹配,但我认为它不可能在Java中.
解:
使用正则表达式验证字符串
^\\d+(;\\d+)*$
Run Code Online (Sandbox Code Playgroud)
如果格式正常,则通过对";"进行拆分来获取数字
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |