Alex: Zitat wie in E-Mail formatieren (Regulärer Ausdruck?)

Hallo,

hat jemand eine Idee, wie man folgenden Text:

##################
Hallo,

Hallo,
wie geht's?

Danke, gut!
##################

...so formatieren könnte:

##################
Hallo,

<blockquote>

Hallo,
wie geht's?

</blockquote>

Danke, gut!
##################

Kommen da vielleicht reguläre Ausdrücke in Frage?

Danke,
Alex

  1. Hi,

    Kommen da vielleicht reguläre Ausdrücke in Frage?

    vom Verfahren her kommt eher ein SAX-Parser in Frage. Kurz gesagt musst Du den Text von Anfang bis Ende durchgehen, den Start eines Zitats erkennen, dessen Ende erkennen (falls vorhanden) und jeweils entsprechend reagieren. Es ist möglich, das Regular Expressions als Hilfsmittel sinnvoll eingesetzt sind.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Kurz gesagt musst Du den Text von Anfang bis Ende durchgehen, den Start eines Zitats erkennen, dessen Ende erkennen (falls vorhanden) und jeweils entsprechend reagieren.

      OK, an sowas habe ich auch schon gedacht. Mal probieren...

      Danke!
      Alex

  2. hi,

    nehmen wir mal an, dass du die > im Text schon HTML-gerecht kodiert vorliegen hast, also als &gt;

    $text = "Hallo,  
      
    &gt; Hallo,  
    &gt; wie geht's?  
      
    Danke, gut!";  
      
    echo preg_replace('/(((^&gt;.*$)\n)+)/m', "<blockquote>\n$1</blockquote>\n", $text);
    

    Die systemabhängigen Zeilenumbruchzeichen im Text vorher noch zu \n zu vereinheitlichen, empfiehlt sich.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga,

      echo preg_replace('/(((^&gt;.*$)\n)+)/m', "<blockquote>\n$1</blockquote>\n", $text);

      Das sieht interessant aus! Werde das auch mal testen.

      Danke!
      Alex

    2. gudn tach!

      echo preg_replace('/(((^&gt;.*$)\n)+)/m', "<blockquote>\n$1</blockquote>\n", $text);

      bloss noch kleinigkeiten:
      ein klammernpaar ist dabei redundant und ein zeilenende vorm zeilenumbruch ist ebenfalls redundant. wenn man ferner quotes beruecksichtigen moechte, die sich ganz am ende befinden (die aber afaik eh nie vorkommen sollten), koennte man

      echo preg_replace('/((?:^&gt;.*(?:\n|\z))+/m', "<blockquote>\n$1</blockquote>\n", $text);

      nutzen.

      prost
      seth

      1. Hallo seth,

        echo preg_replace('/((?:^&gt;.*(?:\n|\z))+/m', "<blockquote>\n$1</blockquote>\n", $text);

        Hm, da stimmt irgendwas nicht. Da fehlt irgendwo eine ")".

        So frisst es aber alle Zitat-Zeilen, bis auf die letzte, kann das sein?:

        echo preg_replace('/((?:^&gt;.*(?:\n|\z)))+/m', "<blockquote>\n$1</blockquote>\n", $text);

        Jetzt habe ich's mal so gemacht und es scheint soweit zu funktionieren:

        echo preg_replace('/(((&gt;.*$)(?:\n|\z))+)/m', "<blockquote>\n$1</blockquote>\n", $text);

        Alex

        1. gudn tach!

          echo preg_replace('/((?:^&gt;.*(?:\n|\z))+/m', "<blockquote>\n$1</blockquote>\n", $text);

          Hm, da stimmt irgendwas nicht. Da fehlt irgendwo eine ")".

          oops, ja, sorry; die aeussere.

            
          echo preg_replace('/((?:^&gt;.*(?:\n|\z))+)/m', "<blockquote>\n$1</blockquote>\n", $text);
          

          ^ die da.

          Jetzt habe ich's mal so gemacht und es scheint soweit zu funktionieren:

          echo preg_replace('/(((&gt;.*$)(?:\n|\z))+)/m', "<blockquote>\n$1</blockquote>\n", $text);

          das $ ist immer noch ueberfluessig. zudem brauchst den inneren ausdruck nicht in klammern zu setzen, wenn du ihn nicht explizit speichern willst. ausserdem ist es geschickter, mit ?: diejenigen klammer-ausdruecke nicht zwischenzuspeichern, die man nicht explizit benoetigt.
          ansonsten machen diese regexp und die oben korrigierte das gleiche.

          prost
          seth