#! /usr/bin/perl -w use strict; use warnings; my $data = shift; $data =~ s/\W//g; my @groups; my @refs; for (1 .. (length $data) / 2) { push @groups, "(.)"; unshift @refs, "\\$_"; my $regex = join('',@groups).".?".join('',@refs); print "$regex\n"; while ($data =~ /$regex/ig) { print "$&\n"; } }