你可以这样做:
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static List getAllMatches(String text, String regex) {
List matches = new ArrayList();
Matcher m = Pattern.compile("(?=(" + regex + "))").matcher(text);
while(m.find()) {
matches.add(m.group(1));
}
return matches;
}
public static void main(String[] args) {
System.out.println(getAllMatches("abaca", "a.a"));
System.out.println(getAllMatches("abaa", "a.*a"));
}
}
打印:
[aba, aca]
[abaa, aa]
唯一的事情是你从最后的比赛列表中缺少阿巴.这是因为贪婪.*在a.* a.您无法使用正则表达式解决此问题.您可以通过遍历所有可能的子字符串并在每个子字符串上调用.matches(regex)来执行此操作:
public static List getAllMatches(String text, String regex) {
List matches = new ArrayList();
for(int length = 1; length <= text.length(); length++) {
for(int index = 0; index <= text.length()-length; index++) {
String sub = text.substring(index, index + length);
if(sub.matches(regex)) {
matches.add(sub);
}
}
}
return matches;
}
如果你的文字保持较小的话,这样做会很好,但是对于较大的字符串,这可能会变得太计算强烈.