#! perl -slw use strict; my $re = qr[ (.) (?=(.)(.)) (?= .* (?: \1\2\3 | \1\3\2 | \2\1\3 | \2\3\1 | \3\1\2 | \3\2\1 ) .* $) ]x; while( ) { chomp; print "'$_'", $_ !~ m[$re]g ? ' passed' : 'failed'; } __DATA__ abcdbca abcba abcdabe