В Java, при использовании регулярных выражений для поиска шаблонов, как получить вложенный результат?

Дело в том, что я хочу найти строку, которая удовлетворяет "c+d" в строке "cccd". Мой код выглядит следующим образом,

String str="cccd";
String regex="c+d";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(str);
While(matcher.find()){
    System.out.println(matcher.group())
}

Результат только "cccd". Но я хочу получить все возможные результаты, включая вложенные, такие как cd, ccd и cccd. Как мне это исправить, заранее спасибо.

1 ответ

Решение

Просто используйте взгляд, чтобы захватить перекрывающихся символов,

(?=(c+d))

И, наконец, выведите индекс группы 1.

DEMO

Ваш код будет,

String str="cccd";
String regex="(?=(c+d))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(str);
while(matcher.find()){
    System.out.println(matcher.group(1));
}

Выход:

cccd
ccd
cd
Другие вопросы по тегам