Я хочу сопоставить что-то вроде aaaa, aaaad, adjjjjk. Что-то вроде ([az])\1+ использовалось для сопоставления повторяющихся символов, но я не могу понять это для четырех букв.
Регулярное выражение для сопоставления четырех повторяющихся букв в строке с использованием шаблона Java
Ответы (4)
Не зная о синтаксисе конечного повторения, ваш собственный навык решения проблем должен привести вас к следующему:
([a-z])\1\1\1
Конечно, это некрасиво, но:
- Оно работает
- Это тренирует ваш собственный навык решения проблем
- It may lead you to deeper understanding of concepts
- In this case, knowing the desugared form of the finite repetition syntax
У меня есть опасения:
"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!
// ^^ ^^
Вы хотите сопоставить один символ, а затем этот символ повторить еще три раза:
([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
Вы можете поставить {n}
после чего-то, чтобы соответствовать этому n
раза, поэтому:
([a-z])\1{3}
Общий шаблон регулярного выражения для предопределенного повторения — {4}
.
Таким образом, здесь ([az])\1{3} должно соответствовать вашим 4 символам.