#!/usr/bin/perl use strict; use warnings; use Regexp::Common; $_ = <<'--'; [xyz]level 1.1[/xyz] [xyz]level 1.2[/xyz] [xyz]level 1.1 [xyz]level 2.1[/xyz] rest of 1.1 [/xyz] [xyz] error [xyz] level 1.1 [xyz] level 2.1 [/xyz] [/xyz] [xyz] level 1.2 [/xyz] -- 1 while s!$RE{balanced}{-begin => "[xyz]"}{-end => "[/xyz]"}{-keep}! "
" . substr ($1, 5, -6) . "
"!gex; print; __END__
level 1.1
level 1.2
level 1.1
level 2.1
rest of 1.1
[xyz] error
level 1.1
level 2.1
level 1.2