Nie znam jakoś super Javy ale tak na pierwszy rzut oka to chyba zapomniałeś o paru warunkach dla zbadania poprawności zapisu liczby rzymskiej, np. o fakcie, że litery stojące obok siebie mogą wystąpić max 3 razy, dlatego dla cyfry 4 poprawny jest zapis IV ale IIII nie, ponieważ "I" może być powtórzony max 3 razy. W związku z tym mamy też ograniczenie na maksymalną liczbę w zapisie podstawowym na 3999. Powyżej tej liczby w oryginalnym zapisie rzymskim stosowane są dodatkowe "kreski" pionowe i poziome ale wątpię abyś chciał się w to bawić w tym programie, zresztą w praktyce liczby rzymskie w powszechnym użytku nie przekraczają właśnie 3999.
Dodatkowo jeśli już robisz regexp do tej walidacji to proponowałbym od razu sprawdzić właśnie pełną poprawność liczby, np. wzorcem:
^(?=[MDCLXVI])M{0,3}(?:C[MD]|D?C{0,3})(?:X[CL]|L?X{0,3})(?:I[XV]|V?I{0,3})$/
który zwaliduje nam również wspomniane ponad trzykrotne powtórzenia liczb. Dodatkowo trzeba też pamiętać, że litery w pewnych konfiguracjach dają różnicę, np. CM oznacza 1000-100=900 (M-1000, C-100).