my @in_order = ($str =~ m{ ^(?> .*? ([abcd]) ) (?> .*? (?!\1) ([abcd]) ) (?> .*? (?!\1|\2) ([abcd]) ) (?> .*? (?!\1|\2|\3) ([abcd]) ) }x);