Sven: Muster für Leerzeichen

Hallo!

Ich tue mich noch schwer mit der Verwendung von Mustern. In meinem Anwendungsfall möchte ich solange Leerzeichen und Zeilenumbrüche entfernen bis ich auf ein Zeichen Treffe, das allerdings nicht im Gesamten Dokument, sondern nur zwischen einem fixem String und dem antreffenden Zeichen.

In Word werden HTML-Sites Grundsätzlich mit einem Zeilenumbruch und zich Leerzeichen nach einem <td> ausgespuckt, bevor der Inhalt der TD folgt. Eben diese Lücke möchte ich schlißen, sodass der Inhalt direkt dem <td> folgt.

Konkret

  
   <td>  
      Blabla  
  
soll werden zu  
  
   <td>Blabla  

Nach dem TD suche ich mit !<td(.*?)>!

  1. Hi,

    In meinem Anwendungsfall möchte ich solange Leerzeichen und Zeilenumbrüche entfernen

    \s - siehe http://www.php.net/manual/en/regexp.reference.backslash.php

    In Word werden HTML-Sites Grundsätzlich

    Vielleicht sollte man eher an der Stelle ansetzen - statt in von Word erzeugtem grauslichen Pseudo-HTML nachher rumzupfuschen, gleich einen ordentlichen Editor wählen ...?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      In meinem Anwendungsfall möchte ich solange Leerzeichen und Zeilenumbrüche entfernen

      \s - siehe http://www.php.net/manual/en/regexp.reference.backslash.php

      Danke, darüber bin ich auch gestolpert. Aber scheinbar verstehe ich die Anwendung nicht. preg_replace("!<td(.*?)>!s","", würde ja auch das <td> ersetzen. Und Einzeilig wurde die Ausgabe trotzdem nicht?

      In Word werden HTML-Sites Grundsätzlich

      Vielleicht sollte man eher an der Stelle ansetzen - statt in von Word erzeugtem grauslichen Pseudo-HTML nachher rumzupfuschen, gleich einen ordentlichen Editor wählen ...?

      MfG ChrisB

      Das ist nicht drinn, denn die Anforderrung an das Script ist es Word-Dokumente verarbeiten zu können. Da ich .doc nicht zerstückeln kann, exportiere ich die .doc via MS Word zu .html

      1. preg_replace("!<td(.*?)>!s","", würde ja auch das <td> ersetzen. Und Einzeilig wurde die Ausgabe trotzdem nicht?

        Also mußt Du Dir das <td(.*?)> merken, in dem Suchmuster auch nach nachvolgendem whitespace und nachfolgendem nicht-whitspace suchen. Letzteres auch merken. Und dann ersetzt Du nicht durch nichts, sondern durch das Gemerkte. Oder Du machst es mit Look-around_assertions, dann kannst Du mit nichts ersetzen.

        1. preg_replace("!<td(.*?)>!s","", würde ja auch das <td> ersetzen. Und Einzeilig wurde die Ausgabe trotzdem nicht?

          Also mußt Du Dir das <td(.*?)> merken, in dem Suchmuster auch nach nachvolgendem whitespace und nachfolgendem nicht-whitspace suchen. Letzteres auch merken. Und dann ersetzt Du nicht durch nichts, sondern durch das Gemerkte. Oder Du machst es mit Look-around_assertions, dann kannst Du mit nichts ersetzen.

          wuih >.<

          Danke für die Antworten! Dann versuche ich mich da mal so durchzuhangeln.

          Nur eine Frage: Warum funktioniert soetwas nicht?: preg_replace("!<td(.*?)>(.*)\s!s",""

          Das in diesem Fall das <td(.*?)> mit ersetzt wird, ist diesmal sogar erwünscht.

          1. Nur eine Frage: Warum funktioniert soetwas nicht?: preg_replace("!<td(.*?)>(.*)\s!s",""

            Wie äußert sich "funktioniert nicht"?

            1. Nur eine Frage: Warum funktioniert soetwas nicht?: preg_replace("!<td(.*?)>(.*)\s!s",""

              Wie äußert sich "funktioniert nicht"?

              Er schneidet eben ab dort an sämtliche Zeichen ab.

              Das Problem ist aber gelöst, die Korrekte Variante lautet (\s+)