Thread Platzhalter für HTML-Ausdrücke (reguläre Ausdrücke) (47 answers)
Opened by vitopetre at 2010-04-02 09:42

topeg
 2010-05-15 19:54
#137123 #137123
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
es gibt noch andere Möglichkeiten:
Hier mittels CPAN: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();

View full thread Platzhalter für HTML-Ausdrücke (reguläre Ausdrücke)