my @tst = qw( A,G AG,CT TC,CA GAT,CGA CGAT,TG ,G ACGT X,A AA,G AC,GGC ATGA,TGG ATCXG,AAC ); for (@tst) { my $side = qr/(?:([ACGT])(?![^,]*\g{-1}))+/; print $_ . (/^$side,$side$/ ? ' good' : ' bad') . $/; }