use strict; my $input=' This is sample <This is sample text> This is sample <Th is is sample text this is sample text sample text >'; my @arr=$input=~m#<[^<>]+(?:.+?[^<>]*)?>#g; print join "\n",@arr; #### qr {<(?:[^<>]+||)*>} #### qr {<(?:[^<>]+||)*[^>]*>} #### my $re; $re=qr{(?:[^<>]+|(??{$re})?)*}; my @arr=$input=~m#<$re>#g;