Я хочу сопоставить что-то вроде aaaa, aaaad, adjjjjk. Для сопоставления повторяющихся символов использовалось нечто вроде ([a-z])\1+, но я не могу понять это для четырех букв.
Регулярное выражение для повторения четырех повторяющихся букв в строке с использованием шаблона Java
Ответ 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 символам.