>>76-77
どちらも深い意味はないよ
行き当たりばったりで何とかテストに通るようにしただけだから

> 3桁までの表現に0*としてるのはなぜなのでしょうか?

コメント付けてくれた通りまさしく「0〜3桁とその先頭に0が続くパターン」
という順序で考えてたから結果的にそうなったのだと思う
まず0から999に一致するパターンを書いて、それに 0 が先行する場合 0* を足して
でも 0900 には一致しないように… とかそんな感じ

> この2つは合わせて \+0[1-8][0-9][0-9] としてはダメなのでしょうか?

ダメじゃない
その辺りはこのジェネレーターで生成した正規表現をもとにしてる

Regex Numeric Range Generator
http://gamon.webfactional.com/regexnumericrangegenerator/
100–899 ⇒ ([1-7][0-9]{2}|8[0-8][0-9]|89[0-9])

たまたま 8[0-8][0-9] と 89[0-9] がまとめられると気がついたのでそこは直したけど
全部まとめられるとは気づいてなかっただけ