Подтвердить что ты не робот

Регулярное выражение для повторения четырех повторяющихся букв в строке с использованием шаблона Java

Я хочу сопоставить что-то вроде aaaa, aaaad, adjjjjk. Для сопоставления повторяющихся символов использовалось нечто вроде ([a-z])\1+, но я не могу понять это для четырех букв.

4b9b3361

Ответ 1

Не зная о синтаксисе конечного повторения, ваше умение решать проблемы должно привести вас к этому:

([a-z])\1\1\1

Очевидно, это не очень, но:

  • Работает
  • Он использует свое собственное умение решать проблемы.
  • Это может привести вас к более глубокому пониманию понятий
    • В этом случае, зная десугатную форму синтаксиса конечного повторения

Привет, ребята, классные ответы, но у меня есть одна проблема.

  • "ffffffff".matches("([a-z])\\1{3,}") = true
  • "fffffasdf".matches("([a-z])\\1{3,}") = false
  • "asdffffffasdf".matches("([a-z])\\1{3,}") = false

Что я могу сделать для двух нижних?

Проблема в том, что в Java matches необходимо сопоставить всю строку; это как если бы шаблон был окружен ^ и $.

К сожалению, нет String.containsPattern(String regex), но вы всегда можете использовать этот трюк для окружения шаблона с помощью .*:

"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
//                         ^^              ^^

Ответ 2

Вы хотите совместить один символ, а затем этот символ повторяется еще три раза:

([a-z])\1{3}

Примечание. В Java вам нужно избежать обратных косых черт внутри ваших регулярных выражений.


Обновление. Причина, по которой он не делает то, что вы хотите, - это то, что вы используете метод matches, который требует, чтобы строка точно соответствовала регулярному выражению, а не только тому, что она содержит регулярное выражение. Чтобы проверить наличие сдерживания, вы должны использовать класс Matcher. Вот пример кода:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Program
{
    public static void main(String[] args)
    {
        Pattern pattern = Pattern.compile("([a-z])\\1{3}");
        Matcher matcher = pattern.matcher("asdffffffasdf");
        System.out.println(matcher.find());
    }
}

Результат:

true

Ответ 3

Вы можете поместить {n} после чего-то, чтобы соответствовать ему n раз, поэтому:

([a-z])\1{3}

Ответ 4

Общий шаблон регулярного выражения для предварительного повторения {4}.

Таким образом, здесь ([a-z])\1 {3} должно соответствовать вашим 4 символам.