$ perl -le' my @x = ( [ q/CCCATCTGTCCTTATTTGCTG/, [ qw(ATCTG ATTTG) ] ], [ q/ACCCATCTGTCCTTGGCCAT/, [ qw(CCATC) ] ], [ q/CCACCAGCACCTGTC/, [ qw(CCACC CCAGC GCACC) ] ], [ q/CCCAACACCTGCTGCCT/, [ qw(CCAAC ACACC) ] ], ); for ( @x ) { my $str = $_->[0]; for my $subs ( @{ $_->[1] } ) { ( $regex = $subs ) =~ s/(.)(?=.)/$1\[][]?/g; $str =~ s{($regex)}{ ( $1 =~ /]/ ? "" : "[" ) . "$subs]" }eg; } print $str; } ' CCC[ATCTG]TCCTT[ATTTG]CTG AC[CCATC]TGTCCTTGGCCAT [CCACCAGCACC]TGTC C[CCAACACC]TGCTGCCT