RegExp - "alles außer ..."
Matthias
- sonstiges
Hallo,
ich möchte aus einem html-file alle tags außer einigen wenigen bestimmten entfernen.
/</?(a|h1|h2|h3)[^>]*>/ findet mir alle tags die ich zulassen will, aber wie negiere ich diesen Ausdruck?
Grüße, Matthias
Grüße,
strip_tags() kommt nicht in frage?
MFG
bleicher
Grüße,
strip_tags() kommt nicht in frage?
MFG
bleicher
Leider nicht, da ich keinen Ersatz angeben kann, mittels preg_replace() aber schon.
Grüße, Matthias
Grüße,
2 durchläufe? die frage war ja nach entfernen der htmltags mit ausnahmen - was strip_tags auch tut - oder hast du was anderes gesucht? prezisiere die anfrage^^
MFG
bleicher
Hallo,
Hallo,
/</?(a|h1|h2|h3)[^>]*>/ findet mir alle tags die ich zulassen will, aber wie negiere ich diesen Ausdruck?
so: /</?[^(a|h1|h2|h3)][^>]*>/
(bin mir aber nicht 100% sicher)
mfg
Moin Moin!
so: /</?[^(a|h1|h2|h3)][^>]*>/
Nö, [] macht Character Classes. Das matcht alle Zeichen, die nicht runde Klammern, a, h, 1, 2, 3 oder Pipe sind, die einer öffnenden Spitzen klammer und einem optionalen Slash folgen.
Man könnte über Extended REs nachdenken (wie (?! ö.ä.) oder den Code umbauen, dass zum einen Text außerhalb von Tags gematcht und rauskopiert wird und zum anderen die erlaubten Tags.
Man könnte alle Tags matchen und beim Ersetzen entscheiden, ob das Tag überleben darf oder nicht. Ungefähr so:
my $allowed=map { $_ => 1 } qw( a h1 h2 h3 );
$text=~s/<(/?)([^>]+?)(\s[^>]+)?>/$allowed{lc $2} ? "<$1$2$3>" : ""/ge; # ungetestet!
Alexander
Hi,
ich möchte aus einem html-file alle tags außer einigen wenigen bestimmten entfernen.
/</?(a|h1|h2|h3)[^>]*>/ findet mir alle tags die ich zulassen will, aber wie negiere ich diesen Ausdruck?
negative Lookahead dürfte das Stichwort sein, nach dem Du suchst.
cu,
Andreas