>perl -wMstrict -le "use Regexp::Assemble; ;; my %subs = (Xaa1 => 'foo', Xaa11 => 'bar', Xaa => 'baz',); ;; my $ra = Regexp::Assemble ->new ->add(map quotemeta, keys %subs) ->anchor_word ; print $ra->re; ;; my $s = 'Xaa Xaa1 Xaa11 Xa'; $s =~ s{ ($ra) }{$subs{$1}}xmsg; print qq{'$s'}; " (?-xism:\bXaa(?:1?1)?\b) 'baz foo bar Xa'