grep /$string1.*$string2|$string2.*$string1/, #### grep / ^ (?= .* ($string1) (?{ local $s1 = $-[1]; local $e1 = $+[1]; }) ) .* ($string2) (?(?{ my $s2 = $-[2]; my $e2 = $+[2]; ($s2 < $e1) && ($e2 > $s1) })(?=A)(?!A)) /x,