##
level 1.1
level 1.2
####
[xyz]level 1.1 [xyz]level 2.1[/xyz] rest of 1.1 [/xyz]
####
level 1.1 level 2.1
rest of 1.1
####
[xyz] error [xyz] level 1.1 [xyz] level 2.1 [/xyz] [/xyz]
[xyz] level 1.2 [/xyz]
####
[xyz] error level 1.1 level 2.1
level 1.2
####
while ($string =~ s/
\[xyz\]
(text not containing [xyz] or [\/xyz])
\[\/xyz\]
/
"$1
"
/gsiex;
####
while ($string =~ s/
(\[\Q$tag\E\])
(.+?)
(\[\/\Q$tag\E\])
/
my ($pre, $text, $post) = ($1,$2,$3);
if ($text =~ m|\[\Q$tag\E\]|) {
$pre.$text.$post;
}
else {
"$text<\/td><\/tr><\/table>"
}
/gsiex) {
1; # do nothing
}