... the requirement to match leading and trailing brackets, period and spaces ...
I had in mind using a CPAN module only as a source for a regex for dependably recognizing the Roman-numeric part of your string, something along the lines of what Regexp::Common provides. Unfortunately, this module does not seem to support Roman numerals.
Ok, then maybe use the Roman-to-decimal conversion functions of Roman or Text::Roman (but I've not used either of these modules and so can't recommend them) or some such to test for the 1 .. 39 range of a Roman sequence extracted with a simple [ivxIVX]+ capture. The advantage of using such a module is that it is, one presumes, well-tested. (These modules both provide an isroman() function that would, one would hope, reject something like ixixixix, but I haven't checked this.)
But if you have to do all that, maybe it's better to hand-craft (and test!) your own [i-xxxix] regex...
Give a man a fish: <%-{-{-{-<
| [reply] [d/l] [select] |