Thread Text Parsen (3 answers)
Opened by sid burn at 2007-04-26 16:22

sid burn
 2007-04-26 16:22
#76244 #76244
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Hi,
mal wieder ich. ;)

Ich habe folgende Aufgabe:
In einer Variable steht ein kompletter Text. Dieser Text enthälz zusätzlich HTML Elemente. Ist aber kein komplett gültiger HTML Code. Also kein <html> <body> Tags etc. Weiterhin sind Newline Zeichen im text enthalten.

Die Aufgabe ist nun alle Newline Zeichen in <br /> umzuwandeln. Okay das ist nicht das Problem.

Als Bediengung gilt allerdiengs das Newline Zeichen innerhalb von tabellen nicht in Newline Zeichen umgewandelt werden sollen. Auser wenn das Newline Zeichen innerhalb eines <td> oder <th> feldes vorkommt soll es wieder in ein <br /> umgewandelt werden.

Bisher habe ich diese Aufgabe z.B: folgendermaßen gelöst:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $in_table = 0;
my $in_td = 0;
my $in_th = 0;
while (not $text =~ m/\G\z/gc) { # Noch kein Ende erreicht
if ( $text =~ m/\G<\s*table\b/igc ) { $in_table++ } # Wenn in table dann var incr
elsif ( $text =~ m/\G<\s*td\b/igc ) { $in_td++ } # wenn in td dann var incr
elsif ( $text =~ m/\G<\s*th\b/igc ) { $in_th++ } # wenn in th dann var incr
elsif ( $text =~ m{\G</\s*td\s*>}igc ) { $in_td-- } # wenn td verlassen dann var decr
elsif ( $text =~ m{\G</\s*th\s*>}igc ) { $in_th-- } # wenn th verlassen dann var decr
elsif ( $text =~ m/\G(?=\n)/gc ) { # Wenn ein Newline kommt...
$text =~ s{\G\n}{<br />} if not $in_table;
$text =~ s{\G\n}{} if $in_table && not ($in_td || $in_th);
$text =~ s{\G\n}{<br />} if $in_table && ($in_td || $in_th);
}
else { $text =~ m/\G./igcs } # Regex Engine ein Zeichen weiter Setzen
}


Das Funktioniert zwar alles, aber ich finde es doch ziemlich umständlich.

Gibt es irgendwie andere, bessere Möglichkeiten solch einen Text zu Parsen und dann auch nach belieben abzuändern? Optimal finde ich meine Lösung nicht auch wenn sie erstmal Funktioniert. Das erkennen der HTML Tags ist ja ansonsten auch ziemlich einfach gehalten.\n\n

<!--EDIT|sid burn|1177590574-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Text Parsen