В вашем регулярном выражении вы используете (.)\\1
, который будет захватывать любой символ в группе и ссылаться на это будущее, используя обратную ссылку, которая, например, также будет соответствовать 012$$521478
Что вы можете сделать, это изменить (.)\\1)
чтобы соответствовать цифрам от 2 до 9, как ([2-9])\\1
.Вы можете опустить вторую группу захвата, если вы не ссылаетесь на это в своем инструменте или коде.{1}
можно опустить, а [\\d]
можно записать как \\d
Обновленное регулярное выражение может выглядеть следующим образом:
^012([2-9])\1\d{6}$
В Java:
String regex = "^012([2-9])\\1\\d{6}$";
Regex demo | Java demo
Объяснение
^
Утверждение начала строки 012
совпадать буквально ([2-9])
Захват в группе цифр 2-9 \1
обратная ссылка на первую группу захвата \d{6}
совпадение с 6 цифрами $
Утвердить конец строки