java - 使用 split 提取重叠匹配

标签 java regex split

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

例如,如果尝试查找与“aba”匹配的内容:

String input = "abababa";
String[] parts = input.split(???);

预期输出:

[aba, aba, aba]

最佳答案

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

您应该在此处使用 PatternMatcher 类。 您可以使用此正则表达式:-

Pattern pattern = Pattern.compile("(?=(aba))");

并使用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());
}

输出:-

aba found at index: 0
aba found at index: 2
aba found at index: 4

关于java - 使用 split 提取重叠匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469476/

相关文章:

java - 最小化java中的复杂线性多变量函数

java - 对于拥有的一对多 rs,makePersistent。在 JDO 中无法可靠工作

java - 使用服务器 java api 从 jasperserver 存储库检索资源

python - 我的正则表达式没有捕捉到文本中所需的模式?

python - 如何根据字符拆分数据框列并保留该字符?

java - string.split 方法中的字符串分隔符

excel - 无法从 url 中提取 id

java - 使用动态别名准备 ibatis 查询

python - 对 Python 中的正则表达式模式感到困惑

c# - 从字符串中获取随机的单词序列?