my $str = "start b2 end start b2 end start b2 end"; #only one b2 between each start and end if ($str =~ /.*start((.*?b2.*?b2).*?)end/) { print "$1\n"; } __END__ Output: b2 end start b2