Andi: Whitespaces preg_replace im <pre>-Tag

Hallo,

folgendes Problem:
Ich bekomme die Text mit allerhand Whitespaces drin. Ich lösche nun alle die mehr als 1 Whitespaces haben (preg_replace(array("/^\s+/","/\s{2,}/","/\s+$/"),array(""," ",""),$text)).

Nun möchte ich aber, dass nur Whitespaces gelöscht werden welche nicht in einem <pre></pre>-Tag stehen.

Hat jemand rat, wie man das am einfachsten lösen könnte?

Grüße
Andi

  1. Lieber Andi,

    was genau ist "die Text"? Ist es HTML-Code? Ist es ein vollständiges HTML-Dokument?

    Ich lösche nun alle die mehr als 1 Whitespaces haben (preg_replace(array("/^\s+/","/\s{2,}/","/\s+$/"),array(""," ",""),$text)).

    Nun möchte ich aber, dass nur Whitespaces gelöscht werden welche nicht in einem <pre></pre>-Tag stehen.

    anscheinend ist es tatsächlich HTML-Code... Also whitespace Zeichen, die nicht in <pre> stehen...? Dann ist der zweite Array-Eintrag ungenau, denn er kümmert sich noch nicht um <pre>-Elemente. Für diese Aufgabe könnte es sein, dass Du lookahead und lookbehind brauchst. Nähere Informationen findest Du im Kapitel zur Pattern Syntax des PHP Handbuchs unter "Assertions".

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo,

      ich dachte mir auch zuerst, dass es mit Assertions gingen würde. Aber das Problem ist, dass ich <pre class='blabla'>  ascnasc  </pre> nicht finde obwohl das im pre steht.

      Grüße
      Andi

      1. Hi,

        ich dachte mir auch zuerst, dass es mit Assertions gingen würde. Aber das Problem ist, dass ich <pre class='blabla'>  ascnasc  </pre> nicht finde obwohl das im pre steht.

        Assertions koennen IIRC keine variable Laenge haben, sondern muessen "fest" sein.

        Damit nach <pre> Ausschau zu halten, ginge also - nach <pre.+> bspw. aber nicht.
        U.U. reicht es ja, ja einem oeffnenden <pre zu suchen.

        Ansonsten muesstest du den Text vielleicht erst mal aufteilen (preg_split), in Teile die generell "Tags" drumherum haben - und dann schauen, ob dieser Tag den Namen pre hat, wenn nein, Whitespace ersetzen - und dann anschliessend alles wieder aneinanderhaengen ...

        MfG ChrisB