Liczby rzymskie bez jakiejkolwiek weryfikacji:
^[MDCLXVI]+$
Opcje wyraenia regularnego: Ignorowanie wielkoci liter
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Wspczesne liczby rzymskie z weryfikacj poprawnoci:
^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$
Opcje wyraenia regularnego: Ignorowanie wielkoci liter
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Wspczesne liczby rzymskie z uproszczon (bardziej elastyczn) weryfikacj poprawnoci:
^(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)$
Opcje wyraenia regularnego: Ignorowanie wielkoci liter
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Proste liczby rzymskie:
^(?=[MDCLXVI])M*D?C{0,4}L?X{0,4}V?I{0,4}$
Opcje wyraenia regularnego: Ignorowanie wielkoci liter
Odmiany wyrae regularnych: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby


Konwersja liczb rzymskich na dziesitne liczby arabskie
sub roman2decimal {
    my $roman = shift;
    if ($roman =~
        m/^(?=[MDCLXVI])
          (M*)             # 1000
          (C[MD]|D?C{0,3}) # 100
          (X[CL]|L?X{0,3}) # 10
          (I[XV]|V?I{0,3}) # 1
          $/ix)
    {
        # Znaleziono liczb rzymsk.
        my %r2d = ('I' =>    1, 'IV' =>   4, 'V' =>   5, 'IX' =>   9,
                   'X' =>   10, 'XL' =>  40, 'L' =>  50, 'XC' =>  90,
                   'C' =>  100, 'CD' => 400, 'D' => 500, 'CM' => 900,
                   'M' => 1000);
        my $decimal = 0;
        while ($roman =~ m/[MDLV]|C[MD]?|X[CL]?|I[XV]?/ig) {
            $decimal += $r2d{uc($&)};
        }
        return $decimal;
    } else {
        # To nie jest liczba rzymska.
        return 0;
    }
}
