Java中正则表达式如果有组,且组可以重复多次的时候,Matcher.group(int group)返回的是该组的最后一次匹配,
例如:正则式:(a(b*))*,对于输入字符串"ababbabbb",Matcher.group(2)获得的是"bbb"
如果我想获得所有的匹配,也就是"b"、"bb"、"bbb",该如何做?
(是否仅根据正则表达式的处理策略无法做到,如果是这样一般实现的模式是怎样的?)
Java中正则表达式如果有组,且组可以重复多次的时候,Matcher.group(int group)返回的是该组的最后一次匹配,
例如:正则式:(a(b*))*,对于输入字符串"ababbabbb",Matcher.group(2)获得的是"bbb"
如果我想获得所有的匹配,也就是"b"、"bb"、"bbb",该如何做?
(是否仅根据正则表达式的处理策略无法做到,如果是这样一般实现的模式是怎样的?)
[code="java"]public static void find(String input, Pattern p, Set set) {
int l = input.length();
String output;
for (int j = l; j >= 0; j--) {
Matcher m = p.matcher(input.substring(0, j));
while (m.find()) {
int n = m.groupCount();
for (int i = 0; i <= n; i++) {
output = m.group(i);
if (output != null) {
set.add(output);
}
}
}
}
}
public static void main(String[] args) {
Pattern p = Pattern.compile("(a(b*))*");
String input = "ababbabbb";
Set<String> set = new TreeSet<String>();
find(input, p, set);
for (String output : set) {
System.out.println(output);
}
}[/code]
注意空字符串也是匹配正则式:(a(b*))*的,应该还有更好的方法