如何找到字符串中至少出现两次但没有重叠的任意两个字母对

时间:2016-05-26 07:25:58

标签: java ruby regex

如何在字符串中找到至少两次出现的任意两个字母对而不重叠?

例如,在字符串' adjkoedjeoieadkkji'我应该找到ad,因为它发生了两次。

在字符串' adjkobbbeoieadkkji'我不应该找到bb因为两次出现重叠。

我已尝试使用/^([a-z]{2}).*(\1)$/仅匹配' abab' 仍在尝试从我身边请帮助我的正则表达式专家

2 个答案:

答案 0 :(得分:1)

找到\1后,您的字符串不一定会结束。所以你什么都没得到。你可以使用

^.*?([a-z]{2}).*?(\1).*$

<强> Regex Demo

答案 1 :(得分:0)

这应该可以解决问题:

public static final Pattern REGEX = Pattern.compile("((\\w\\w))(?=.*\\1)");

public static void main(String[] args) throws Exception {
    String s = "adjkoedjeoieadddkkji";
    Matcher m = REGEX.matcher(s);
    while (m.find()) {
        System.err.println(m.group());
    }
}

仅打印:

ad

重叠ddd不匹配。