如何才能真正获得RegEx的所有匹配?

时间:2013-05-12 09:56:58

标签: java regex

RegEx的结果不包括另一个RegEx的结果。例如,如果我使用模式

[a-z&&[^aeiou]]{2}

我尝试匹配 bcd ,匹配将是 {bc} 而不是 {bc,cd}

我是用Java做的。

2 个答案:

答案 0 :(得分:2)

反复使用Matcher.find(int start)Matcher.start()来查找下一个要查找的String索引。

String haystack="bcd";
Matcher m = pattern.matcher(haystack);
int lookIndex=0;
while(lookIndex < haystack.length() && m.find(lookIndex)) {
    lookIndex=m.start()+1;
    System.out.println("Found " + m.group());
}

答案 1 :(得分:2)

您可以通过涉及捕获组的前瞻来实现这一目标:

(?=([a-z&&[^aeiou]]{2})).

您需要一个涉及Matcher.find的循环,并且每次使用group(1)查询匹配器以获得您的匹配。主要的正则表达式匹配本身是无关紧要的,应该被忽略。