RegEx的结果会排除其他RegEx的结果。例如,如果我使用模式我怎样才能获得RegEx的所有匹配?
[a-z&&[^aeiou]]{2}
我尽力配合BCD,比赛将{} BC代替的{BC,CD}。
我在Java中这样做。
RegEx的结果会排除其他RegEx的结果。例如,如果我使用模式我怎样才能获得RegEx的所有匹配?
[a-z&&[^aeiou]]{2}
我尽力配合BCD,比赛将{} BC代替的{BC,CD}。
我在Java中这样做。
可以与涉及捕获组在先行得到这样的:
(?=([a-z&&[^aeiou]]{2})).
你需要涉及Matcher.find
一个循环,每一次查询匹配与group(1)
让你的对手。主要的正则表达式匹配本身是不相关的,应该被忽略。
为什么你需要向前看?最后的'。'是否阻止只包含最后一个字符的匹配? – escitalopram 2013-05-12 10:27:14
'不。最后防止只包含最后一个字符的匹配吗?“不,不。但它确实阻止了空匹配(如果我们使用匹配空字符串的模式)。预见是解决这个问题的一种简便方法,您不必关心边界情况。 – nhahtdh 2013-05-12 10:46:24
@escitalopram我没有试过这个,所以我保守地把'.'放在里面。我认为整个事情也没有问题。 – 2013-05-12 11:06:24
反复使用Matcher.find(int start)
和Matcher.start()
可以找出下一个字符串索引。
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());
}
这确实是一种解决方案,但是当模式可以匹配空字符串时,您必须非常小心... – nhahtdh 2013-05-12 10:13:24
现在可以对其进行调整以避免出现OutOfBoundsException。还用匹配空字符串的模式成功测试了它。 – escitalopram 2013-05-12 10:35:41
注意:目前没有方法(AFAIK)获取可以在相同索引处开始的所有匹配项。例如aaa'的a *',它可以在索引0处有4个匹配。Marko Topolnik的答案涵盖了每个索引最多需要1次匹配的情况。 – nhahtdh 2013-05-12 10:19:08