>perl -wMstrict -le "my $open = '{{'; my $close = ']]'; ;; my $opener = qr{ \Q$open\E }xms; my $closer = qr{ \Q$close\E }xms; my $body = qr{ [^\Q$open$close\E] }xms; ;; my $regex = qr{ ( $opener (?: $body++ | (?1) )* $closer ) }xms; ;; my $s = 'xxx {{ foo {{ bar ]] baz ]] yyy {{ fee ]] zzz'; ;; print qq{'$1'} while $s =~ m{ $regex }xmsg; " '{{ foo {{ bar ]] baz ]]' '{{ fee ]]'