Hey,
reguläre Ausdrücke sind hier das falsche Werkzeug.
#!/usr/bin/perl
use strict;
use diagnostics;
use HTML::TokeParser::Simple;
my $parser = HTML::TokeParser::Simple->new(string => <<'');
<div id=1>
<div id=2>
<div id=3>
</div>
</div>
</div>
my @idstack;
while (my $tag = $parser->get_tag) {
if (
(ref $tag eq 'HTML::TokeParser::Simple::Token::Tag::Start')
and
($tag->get_tag eq 'div')
and
(defined $tag->get_attr->{id})
) {
print '[div'.$tag->get_attr->{id}.']';
push @idstack, $tag->get_attr->{id};
next;
} elsif (
(ref $tag eq 'HTML::TokeParser::Simple::Token::Tag::End')
and
($tag->get_tag eq 'div')
) {
my $id = pop @idstack;
print '[/div'.$id.']';
next;
};
print $tag->as_is;
};
Die Edgecases zu behandeln ist deine Hausaufgabe.
--
水-金-地-火-木-土-天-海-冥
水-金-地-火-木-土-天-海-冥