Tem aqui uma proposta de resolução em que evita um horário fora do padrão, por exemplo: 39h69min89s. Vejam que na metade do Regex tem um meta char "|", que indica OU , então, na captura do formato das horas, se o primeiro dígito for maior que 2, o segundo dígito fica restrito de 0 a 3, não ultrapassando assim às 23h. Em relação aos minutos e segundos, temos o valor máximo das casas decimais até 5, e o valor unitário até 9, desse jeito os valores recebidos ficam entre o intervalo de 00 a 59 minutos ou segundos.
[0-1]\dh[0-5]\dmin[0-5]\ds|[2](?=[0-3])\dh[0-5]\dmin[0-5]\ds