our $re; local $re = qr{ \[ (?: (?> [^\[\]]+ ) | (??{ $re }) )* \] }x; my $s = <<'__EOI__'; blah blah blah blah blah blah blah blah [blah [blah blah] [blah blah blah blah] blah] blah blah __EOI__ $s =~ s/$re/moo/g; print($s);