$exp=~ m{^([\w]+|\*)\s* # a name or '*' ($1) (?: # an optional condition in brackets \[\s*(\w+) # name ($2) \s*=\s* # = "([^"]*)" # "string" ($3) \s*\])?}x;