java 正则表达式 - 捕获重复组
java regex - capture repeated groups
我正在使用 Java 的正则表达式库。我想根据以下格式验证字符串:
31,5,46,7,86(...)
数量未知。我想确保该字符串中至少有一个数字,并且每两个数字之间用逗号分隔。我也想从字符串中获取数字。
(注:这只是一个简化的例子,string.split并不能解决我的实际问题)
我写了下面的正则表达式:
({[0-9]++)((?:,[0-9]++)*+)
验证部分有效。但是,当我尝试提取数字时,我得到 2 组:
Group1: 31
Group2: ,5,46,7,86
regex101 版本:https://regex101.com/r/xJ5oQ6/3
有什么方法可以分别获取每个号码吗?即以集合结束:
[31, 5, 46, 7, 86]
提前致谢。
这可能适合你:
/(?=[0-9,]+$)((?<=,|^)[0-9]{1,2})(?=,|$)/g
以上捕获一个或两个数字后跟 ,
或输入结束。
请注意,我使用了 g
全局修饰符。
Java 不允许您访问重复捕获组的单个匹配项。有关详细信息,请查看此问题:Regular Expression - Capturing all repeating groups
Tim Pietzcker 提供的代码也可以帮助您。如果你稍微修改一下并为第一个数字添加一个特殊情况,你可以使用这样的东西:
String target = "31,5,46,7,86";
Pattern compileFirst = Pattern.compile("(?<number>[0-9]+)(,([0-9])+)*");
Pattern compileFollowing = Pattern.compile(",(?<number>[0-9]+)");
Matcher matcherFirst = compileFirst.matcher(target);
Matcher matcherFollowing = compileFollowing.matcher(target);
System.out.println("matches: " + matcherFirst.matches());
System.out.println("first: " + matcherFirst.group("number"));
int start = 0;
while (matcherFollowing.find(start)) {
String group = matcherFollowing.group("number");
System.out.println("following: " + start + " - " + group);
start = matcherFollowing.end();
}
这输出:
matches: true
first: 31
following: 0 - 5
following: 4 - 46
following: 7 - 7
following: 9 - 86
我正在使用 Java 的正则表达式库。我想根据以下格式验证字符串:
31,5,46,7,86(...)
数量未知。我想确保该字符串中至少有一个数字,并且每两个数字之间用逗号分隔。我也想从字符串中获取数字。
(注:这只是一个简化的例子,string.split并不能解决我的实际问题)
我写了下面的正则表达式:
({[0-9]++)((?:,[0-9]++)*+)
验证部分有效。但是,当我尝试提取数字时,我得到 2 组:
Group1: 31
Group2: ,5,46,7,86
regex101 版本:https://regex101.com/r/xJ5oQ6/3
有什么方法可以分别获取每个号码吗?即以集合结束:
[31, 5, 46, 7, 86]
提前致谢。
这可能适合你:
/(?=[0-9,]+$)((?<=,|^)[0-9]{1,2})(?=,|$)/g
以上捕获一个或两个数字后跟 ,
或输入结束。
请注意,我使用了 g
全局修饰符。
Java 不允许您访问重复捕获组的单个匹配项。有关详细信息,请查看此问题:Regular Expression - Capturing all repeating groups
Tim Pietzcker 提供的代码也可以帮助您。如果你稍微修改一下并为第一个数字添加一个特殊情况,你可以使用这样的东西:
String target = "31,5,46,7,86";
Pattern compileFirst = Pattern.compile("(?<number>[0-9]+)(,([0-9])+)*");
Pattern compileFollowing = Pattern.compile(",(?<number>[0-9]+)");
Matcher matcherFirst = compileFirst.matcher(target);
Matcher matcherFollowing = compileFollowing.matcher(target);
System.out.println("matches: " + matcherFirst.matches());
System.out.println("first: " + matcherFirst.group("number"));
int start = 0;
while (matcherFollowing.find(start)) {
String group = matcherFollowing.group("number");
System.out.println("following: " + start + " - " + group);
start = matcherFollowing.end();
}
这输出:
matches: true
first: 31
following: 0 - 5
following: 4 - 46
following: 7 - 7
following: 9 - 86