in reply to Regex: Specifying quantity for bracketed items

You aren't matching what you think you are. The [^ ]+ greedily matches all the letters and numbers but one, as this example will show:
$_ = "\@abcde99\@"; if (/^([^ ]+)([a-z0-9]+)([^ ]+)$/) { # prints: *@abcde9*9*@* print "*$1*$2*$3*\n"; }
A better regex might be this one:
$_ = "\@abcde99\@"; if (/^([^ ]+?)([a-z0-9]{5,12})([^ a-z0-9]+)$/) { print "*$1*$2*$3*\n"; }