Ваша проблема в том, что вы неправильно понимаете диапазоны символов: 0-23
не означает "соответствует любому числу от 0 до 23", это означает: 0-2
- соответствует одной цифре: 0,1 или 2, затем соответствует 3.
Попробуйте этот шаблон: (?:[01][0-9]|2[0-3])(?::[0-5][0-9]){2}
Объяснение:
(?:...)
- группа без захвата
[01][0-9]|2[0-3]
- чередование: соответствует ли0 или одна, за которой следуют любые цифры от 0 до 9 ИЛИ 2, за которыми следуют 0, 1, 2 или 3 (число от 00-23)
(?::[0-5][0-9]){2}
- совпадение :
и[0-5][0-9]
(в основном число от 00-59) дважды
Демо