in reply to My code seems messy...

two general comments: use code comments, e.g. || /foo\d+/ #match foo1234 and also look at the /x modifier in perlre for embedding whitespace and comments inside the regex itself.
Also, the parens are unnecessary in (/foo/) and (19\d{2}).
Here's a (untested) crack at it (also restructing into one RE, since there are commonalities):
if( /( # start re & capture (?: # non-capturing OR clause for the following cases: \d{1,2}\-\d{1,2}\s\w+ # "03-25 X" | \d{1,2}\w{2}\s\w+ # "03aa X" | \d{1,2}\s\w+ # "12 X" | \w+\s\d{1,2}, # "X 12," | \w+\s\d{1,2}\-\d{1,2}, # "X 12-20," ) \s19\d{2} # the <spaceChar>19xx marker )/gxi ){ ... }