我写了这个正则表达式:
String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((\\d+|\\d+-\\d+),\\s+)*(\\d+|\\d+-\\d+)$";
下面是我的主要方法:
public static void main(String... args) {
Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
if (matcher.matches()) {
for (int index = 0; index <= matcher.groupCount(); index++) {
System.out.println(index + ": " + matcher.group(index));
}
}
}
下面是我的输出:
0: match cos 1, 3, 4, 5-7
1: null
2: 4,
3: 4
4: 5-7
看起来1
和3
没有被捕获。(输出4
和5-7
没有问题。)我如何修复我的正则表达式,以便能够捕获它们(并在最后捕获它们而不使用逗号)?
发布于 2012-07-19 09:02:13
例如,如果您的目标是找到something else
或something not else
预测的数字,那么可以将它们分组到一个组中,然后使用,\\s+
进行拆分
String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((((\\d+|\\d+-\\d+),\\s+)*)(\\d+|\\d+-\\d+))$";
Pattern PATTERN = Pattern.compile(REGEX);
Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7");
if (matcher.matches()) {
System.out
.println(Arrays.toString(matcher.group(2).split(",\\s+")));
}
输出:
[1, 3, 4, 5-7]
https://stackoverflow.com/questions/11552387
复制相似问题