Matthias: RegExp - "alles außer ..."

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

  1. Grüße,
    strip_tags() kommt nicht in frage?
    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. 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

      1. 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

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
  2. 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

    1. 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".
  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.