Alexander (HH): RegExp - "alles außer ..."

Beitrag lesen

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

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".