sub genAbbrevRegex{ my( $first, @rest ) = split '', shift; my $re = ''; $re = "(?:$_$re)?" for reverse @rest; return qr[^$first$re$]i; } print genAbbrevRegex( 'fred' );; (?i-xsm:^f(?:r(?:e(?:d)?)?)?$) $r = genAbbrevRegex( 'Yes' );; [0] Perl> print "$_: ", m[$r]? 'ok' : 'not ok' for qw[ YES YE Y yes ye y YS ES S ys es s yees yess ];; YES: ok YE: ok Y: ok yes: ok ye: ok y: ok YS: not ok ES: not ok S: not ok ys: not ok es: not ok s: not ok yees: not ok yess: not ok