/^(.{4}).*\1$/ # ^ and $ match beginning and end of string respectively
####
/^(.{4}).*\1.*\1$/
####
ABCD # pattern
ABCD # match
ACDB # no match
ABED # match
BBCD # match
ABC # no match
####
sub makepattern
{
my $str = shift;
my @res;
for( $i = 0; $i < length( $str ); $i++ ) {
push @res, substr( $str, 0, $i ) . "." . substr( $str, $i + 1, length( $str ) - $i );
}
return join( "|", @res );
}
# example
my $imprecisematch = "ABCD";
my $pattern = makepattern( $imprecisematch );
/^($pattern).*\1.*\1$/ #match $_ against three occurrences of this pattern