kostenloser Webspace werbefrei: lima-city


regex für kommentare im HTML

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g****e

    heyho =)
    ich hab mal ne frage. unzwar bastel ich an einem kleinen content cleaner, der mir aber immer alles ratzeputze kaputthaut, und nicht aufräumt! find ich garnicht lustig, und es bringt mich leider nichtmehr weiter zu googln, weil ich nich ganz weiterkomme.

    kurz:
    ich hab HTML code und will ihn aufräumen, unter anderen will ich ihn von Kommentaren befreien:
    $search = ' / <!-- .* --> / ';

    hab ic jetzt mal als probe, in der hoffnung dass er alles dazwischen findet. findet er auch, unzwar alles was zwischen dem erstenmal vorkommen, und em letzten mal vorkommen steht wenn ich das richtig gesehen habe. wie kann ich zuverlässig solche HTML kommentare entfernen? jemand da mal ne lösung für mich =( ich will nich immer sämtlichen content löschen
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das Problem ist wahrscheinlich, dass .* auch auf <!-- ... --> passt, und deshalb alles zwischen dem ersten und dem letzten Kommentar entfernt wird.
    Das hier ist zwar ungetestet, sollte aber hinhauen:
    "#<!--[^(-->)]+#"
  4. Autor dieses Themas

    g****e

    damit wird der code zwar nichtmehr gelöscht, aber die kommentare wurden auch nicht gelöscht.
    ich hab nu aber den fehler an meinem ausdruck, der müsste so lauten:

    /<!--.+?-->/s

    trotzdem danke =)
  5. h*h

    Mein Lieblingstool um regex in Echzeit auszuwerten: JRX: real-time JavaScript RegExp evaluator

    Unten den Text reinklopfen und oben evaluieren.

    HP
  6. Spätestens bei Conditional Statements bekämest du mit dem Regex Probleme.

    Hier mal ein (unausgereifter) Vorschlag:

    /<!--[^\[](.|\s)*?-->/s


    Was es ersetzen sollte:

    <!-- Hallo welt -->
    <!-- Hallo welt //-->


    usw...

    Was es nicht ersetzen sollte:

    <!--[if IE 7]>
    <link rel="stylesheet" href="/css/ie7.css" type="text/css" media="screen" />
    <![endif]-->


    usw...

    Unter gewissen Umständen wird der Regex auch hier versagen. Dann wäre aber auch die Quellsyntax eh falsch =)

    Also:

    preg_replace("/<!--[^\[](.|\s)*?-->/s", "", $str);


    Beitrag zuletzt geändert: 3.2.2011 2:23:56 von fabo
  7. vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Geht viel einfacher:

    Das Problem am ersten Ausdruck ist die Natur des Regex, diese ist nämlich greedy (en: gierig). Das bedeutet, dass immer das größtmögliche Ergebnis gesucht wird und damit sich der Ausdruck ungreedy verhält, muss man ihn mit der Modifikator u versehen. Die einzige kleine Erweiterung zu deinem ersten Vorschlag wäre also:
    $search = ' / <!-- .* --> /u ';
    Fertig.

    @fabo

    Wer solchen Schmarrn á la
    <!--[if IE 7]>
    in seinen Code einbaut, anstatt einfach anständige PHP-Conditions und bedingte Includes einzusetzen, der ist selber Schuld. Und keiner der n bisschen was von PHP versteht, würde soetwas jemals tun.

    Liebe Grüße
    - VampireSilence

    Beitrag zuletzt geändert: 3.2.2011 12:28:40 von vampiresilence
  8. Autor dieses Themas

    g****e

    präprozessoranweisungen im HTML? sowas gibts?
    was soll der müll denn, und vor allem: wozu ist der gut?
    das hab ich noch nie gesehen 0.0 erklär das mal bitte einer
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!