Попробуйте это регулярное выражение:
input.matches("((\\d)\\1\\d\\1\\1|(\\d)(\\d)\\3\\3\\2)");
Он использует обратные ссылки для обработки повторяющихся чисел и регулярных выражений "или (A|B)
Обратите внимание, что это регулярное выражение будет соответствовать 99999
, что допустимо по вашему определению (т. Е. X
и Y
могут быть одной цифрой).
Также обратите внимание на экранированные косые черты \\
для указания одиночного обратного слеша в регулярном выражении в строке Java.