c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -e "my @test = qw(RC1XY RS RW12QW1X FOO FOOx FOO23PQ xFOO23PQXXX foo xyzzy); ;; for my $s (@test) { printf qq{'$s' -> }; if (my ($p_r, $d1, $p_mc, $p_new_mc) = $s =~ m{ ([[:upper:]]+) (\d*) ([[:upper:]]?) ([[:upper:]]?) }xms) { dd $p_r, $d1, $p_mc, $p_new_mc; } else { print qq{no match \n}; } } " 'RC1XY' -> ("RC", 1, "X", "Y") 'RS' -> ("RS", "", "", "") 'RW12QW1X' -> ("RW", 12, "Q", "W") 'FOO' -> ("FOO", "", "", "") 'FOOx' -> ("FOO", "", "", "") 'FOO23PQ' -> ("FOO", 23, "P", "Q") 'xFOO23PQXXX' -> ("FOO", 23, "P", "Q") 'foo' -> no match 'xyzzy' -> no match