$ cat 938725.pl #!/usr/bin/perl use strict; use warnings; my @search = ('GCGAT','CACGT'); # build regexes my @newsearch; for my $str (@search) { my @tmp; for my $char_idx (0 .. length($str)-1) { my $t = $str; substr($t,$char_idx,1,"[N".substr($t,$char_idx,1)."]"); push @tmp, $t; } push @newsearch, "^(".join("|",@tmp).")"; } while () { print "$.: $_"; for my $t (@newsearch) { print "MATCH for /$t/\n" if /$t/; } } __DATA__ GNGATNNNNNNNNNNNNNNN GCGANBBBBBBBBBBBBBBB CNCGTNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNN $ perl 938725.pl 1: GNGATNNNNNNNNNNNNNNN MATCH for /^([NG]CGAT|G[NC]GAT|GC[NG]AT|GCG[NA]T|GCGA[NT])/ 2: GCGANBBBBBBBBBBBBBBB MATCH for /^([NG]CGAT|G[NC]GAT|GC[NG]AT|GCG[NA]T|GCGA[NT])/ 3: CNCGTNNNNNNNNNNNNNNN MATCH for /^([NC]ACGT|C[NA]CGT|CA[NC]GT|CAC[NG]T|CACG[NT])/ 4: NNNNNNNNNNNNNNNNNNNN