I did it! You weren't far! You just had to delete the first character acceptance in your last .-., since the previous section already ended in letter/number.
^[a-z](-[a-z0-9](-[a-z0-9])*)?(-[a-z0-9]|[a-z0-9])*(?:\.[a-z](-[a-z0-9](-[a-z0-9])*)?(-[a-z0-9]|[a-z0-9])*)*$

Now wondering if it's possible to add a maximum number of characters in this regex.