Thread Platzhalter für HTML-Ausdrücke (reguläre Ausdrücke)
(47 answers)
Opened by vitopetre at 2010-04-02 09:42
es gibt noch andere Möglichkeiten:
Hier mittels HTML::TreeBuilder Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 #!/usr/bin/perl use strict; use warnings; use HTML::TreeBuilder; my $html_data=<<'HTML'; <html> <head><title>test</title></head> <body> <h4 style="float:left">Inhalt</h4> <p>blablablabla 123123123123asdfasdf 43214321fdsafdsafdsa</p> </body> </html> HTML my $html = HTML::TreeBuilder->new(); $html->parse($html_data); # erst das passende "h4" suchen # und dann auf das nachfolgende "p" zugreifen my $h4 = $html->look_down( # wir suchen nach einem "TAG" # und der soll "h4" lauten _tag => 'h4', # führe die den code aus wenn die Bedingung stimmt: # Wenn 1 zurückgeliefert wird haben wir was wir wollen sub { # ist das Attribut "style" gesetzt? return 0 if(! $_[0]->attr('style')); # enthält der Inhalt von "style" "float:left"? return 0 if( $_[0]->attr('style')!~/float:left/); # ist ein Inhalt vorhanden? return 0 if(! $_[0]->as_text()); # ist das nachfolgende Element von Typ "p"? return 0 if( $_[0]->parent()->content()->[$_[0]->pindex()+1]->tag() ne 'p'); return 1; }); if($h4) { # etwas wurde gefunden # den Inhalt ausgeben print "H4 => ".$h4->as_text()."\n"; # das nächste Element bezogen auf "H4" # also # h4 # -> # übergeordentes element (hier body) # -> # Position von h4 +1 ==> p my $p=$h4->parent()->content()->[$h4->pindex()+1]; print "P => ".$p->as_text()."\n"; } print "#"x70,"\n"; # alternative Variante: # erst "p" suchen und dann auf "h4" schließen my $p = $html->look_down( # wir suchen nach einem "TAG" # und der soll "p" lauten _tag => 'p', # führe die den code aus wenn die Bedingung stimmt: # Es muß ein Inhalt vorhanden sein # und das vorherige elemnet muss vom typ "h4" sein sub { # ist überhaupt ein inhalt da? return 0 if(! $_[0]->as_text()); # wir wollen das erste <p> was gefunden wird, # dessen vorheriges element "h4" ist return 1 if( $_[0]->parent()->content()->[$_[0]->pindex()-1]->tag() eq 'h4' ); return 0 }); if($p) { print "P => ".$p->as_text()."\n"; # das vorherige Element bezogen auf "p" my $h4=$p->parent()->content()->[$p->pindex()-1]; print "H4 => ".$h4->as_text()."\n"; } $html->delete(); |