use strict; my $str = " desc aaaaaaaaa notExpected.jpg head aaaaaaaaaaaa notExpected.jpg aa correctImage.jpg "; while ($str =~ m/(.*?)<\/image>/gs) { my ($image_content) = ($1); my $story_st=0; my $story_en=0; my $prelines = $`; while ($prelines =~ m//gs){$story_st++} while ($prelines =~ m/<\/story>/gs){$story_en++} print $image_content, "\n" if ($story_st == $story_en); }