Ваше регулярное выражение ((.)+)00
соответствует 1+ раз любому символу, за которым следует 00
, который не учитывает 8 цифр. Для четвертого уровня вы хотите матч, который не заканчивается на 00
.
Если у вас не может быть 4 пар, 2 из которых равны нулю, и 2 раза, когда ноль не может появиться раньше, чем 2 раза, чем ноль, вы можете использовать чередование с группами захвата. Затем проверьте соответствие, если группа 1, 2 или 3 существует, чтобы получить уровень 1, 2 или 3. Если есть совпадение и нет группы, то у вас будет уровень 4.
^(?:(0[1-9]|[1-9][0-9])0{6}|(0[1-9]|[1-9][0-9]){2}0{4}|((?:0[1-9]|[1-9][0-9])){3}00|(?:0[1-9]|[1-9][0-9]){4})$
Regex demo
Объяснение
^
Начало строки
(?:
Группа без захвата
(0[1-9]|[1-9][0-9])0{6}
Матч 01-99, затем 6 раз по 0
|
или
(0[1-9]|[1-9][0-9]){2}0{4}
Матч 2 раза 01-99, затем 4 раза ноль
|
или
(?:(?:0[1-9]|[1-9][0-9])){3}00
Матч 3 раза 01-99, затем 2 раза ноль
|
или
(0[1-9]|[1-9][0-9]){4})
Матч 4 раза 01-99
)
Закрыть группу без захвата
$
Конец строки
Например:
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
if (null != matcher.group(1)) {
System.out.println("Level 1");
} else if (null != matcher.group(2)) {
System.out.println("Level 2");
} else if (null != matcher.group(3)) {
System.out.println("Level 3");
} else {
System.out.println("Level 4");
}
}
Выход:
Full match: 01000000
Level 1
Full match: 10000000
Level 1
Full match: 99990000
Level 2
Full match: 99999900
Level 3
Full match: 55555555
Level 4
Java-демонстрация