使用拆分提取重叠匹配

Boh*_*ian 3 java regex split

如何使用输入从输入中提取重叠匹配String.split()

例如,如果尝试查找匹配项"aba":

String input = "abababa";
String[] parts = input.split(???);
Run Code Online (Sandbox Code Playgroud)

预期产量:

[aba, aba, aba]
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

String#split不会给你重叠的比赛.因为字符串的特定部分,只会包含在获得的数组的唯一索引中,而不是在两个索引中.

你应该在这里使用PatternMatcher分类.你可以使用这个正则表达式: -

Pattern pattern = Pattern.compile("(?=(aba))");
Run Code Online (Sandbox Code Playgroud)

并使用Matcher#find方法获取所有重叠匹配,并group(1)为其打印.

上面的正则表达式匹配每个空字符串,然后是aba,然后只打印第一个捕获的组.现在因为look-ahead零宽度断言,所以它不会消​​耗匹配的字符串.因此,您将获得所有重叠的匹配.

String input = "abababa";
String patternToFind = "aba";

Pattern pattern = Pattern.compile("(?=" + patternToFind + ")");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(patternToFind + " found at index: " + matcher.start());
}
Run Code Online (Sandbox Code Playgroud)

输出: -

aba found at index: 0
aba found at index: 2
aba found at index: 4
Run Code Online (Sandbox Code Playgroud)