Schrift
[thread]6911[/thread]

utf 8: lesen und schreiben von utf8-html-seiten (Seite 3)

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
GwenDragon
 2005-04-20 17:11
#53983 #53983
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
[quote=newbie001,20.04.2005, 13:09]na ja die Tags zu löchen ist kein Problem, am einfachsten ist:
$html =~ s/<.*>//g;[/quote]
Das denken leider nur Anfänger.
Mit normalen Regexes kannst du kein HTML sauber bekommen.
Du brauchst sowas wie HTML::Parser.
murphy
 2005-04-20 17:29
#53984 #53984
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=GwenDragon,20.04.2005, 15:11]Mit normalen Regexes kannst du kein HTML sauber bekommen.[/quote]
Ich bin überzeugt davon, dass die regulären Ausdrücke von Perl mächtig genug sind, um den gesamten Parser und Reformatter darin zu programmieren -- allerdings wird der resultierende Ausdruck wohl kaum so handlich wie der angegebene sein ;)

Außerdem ist es bestimmt eine gute Idee, solche Dinge nicht von Hand zu machen sondern sich auf gut getestete Module zu verlassen.
When C++ is your hammer, every problem looks like your thumb.
GwenDragon
 2005-04-20 17:39
#53985 #53985
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
[quote=murphy,20.04.2005, 15:29][quote=GwenDragon,20.04.2005, 15:11]Mit normalen Regexes kannst du kein HTML sauber bekommen.[/quote]
Ich bin überzeugt davon, dass die regulären Ausdrücke von Perl mächtig genug sind, um den gesamten Parser und Reformatter darin zu programmieren[/quote]
Natürlich kannst du alles mit Regexes machen - oder besser Perl kann. Und der/Die ProgrammiererIn vielleicht nach elendig langer "Regechserei".
Nur wird es erheblich unübersichtlich und schlechten HTML-Code wirst du, wenn du Pech hast, nicht erwischen.
Ein sauber geschriebener Parser (der ja auch intern mit Regex arbeitet) ist sinnvoller.
newbie001
 2005-04-20 19:44
#53986 #53986
User since
2005-04-19
8 Artikel
BenutzerIn
[default_avatar]
na ja, der Ausdruck war nicht sauber, besser ist:
Code: (dl )
$res =~ s/<\/?.*?>//g;

man kann natürlich diesen Ausdruck verbessern, falls es bei einer Ausnahme nicht das gewünschte Ergbnis liefert.
ich denke schon dass man vieles mit RegExp machen kann.
Strat
 2005-04-20 20:14
#53987 #53987
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
eher funktioniert vielleicht noch
Code: (dl )
1 while $res =~ s|<[^<>]*?>||g;

aber auch das schlaegt z.B. bei folgendem konstrukt fehl:
[html]
<input type="submit" value=">abc" name="xyz<">
[/html]
und wenn man sowas auf javascript loslaesst, kann man so richtig viel spass haben...\n\n

<!--EDIT|Strat|1114013709-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2005-04-20 22:16
#53988 #53988
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=newbie001,20.04.2005, 17:44]na ja, der Ausdruck war nicht sauber, besser ist:
Code: (dl )
$res =~ s/<\/?.*?>//g;

man kann natürlich diesen Ausdruck verbessern, falls es bei einer Ausnahme nicht das gewünschte Ergbnis liefert.[/quote]
ja, hier hast du wieder das problem, dass zeilenumbrüche innerhalb eines
tags (nicht unüblich) die regex unbrauchbar machen.
klar kann man sich das selber basteln, aber das hier ist doch gerade
das beste beispiel, das nicht zu tun. du hast jetzt in zwei versuchen
eine regex gebastelt, die dir bei gängigen HTML-dokumenten fehlerhafte
ergebnisse bringt
HTML::Parser hingegen ist durchdacht und getestet.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-04-19 21:03.