[REGEX] String bereinigen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] String bereinigen

    Hallo erst mal,

    Ich hab ein Problem einen String zu bereinigen, indem zuviele
    <br /> vorkommen. Das ganze ist daher passiert, da ich leider nl2br
    vor der Speicherung in die Datenbank angewendet habe und nicht erst bei der Ausgabe. Da es sich um tausende Datensätze handelt, möchte ich das jetzt auch nicht mehr umstellen und eine Lösung bei der Ausgabe finden.

    Ich hoffe das mir hier vielleicht jemand helfen kann.

    Ich hab beispielsweise folgenden String:

    Actionfilm, USA 1974<br />
    (Mr. X)<br />
    <br />
    <br />
    <br />
    Text 1<br />
    Text 2,3,4<br />
    <br />
    <br />
    <br />
    <br />

    Wie kann ich es nun anstellen alle <br /> zu entfernen,
    wo mehr als zwei hintereinander sind und am Schluss des Strings sowieso
    jedes <br /> entfernt wird?

    Das Ergebnis sollte also so aussehen:

    Actionfilm, USA 1974<br />
    (Mr. X)<br />
    <br />
    Text 1<br />
    Text 2,3,4

    Vielen Dank im Voraus für die Hilfe!

    Liebe Grüße,
    Max

  • #2
    Da es sich um tausende Datensätze handelt, möchte ich das jetzt auch nicht mehr umstellen und eine Lösung bei der Ausgabe finden.
    Falsch! Du möchtest einmalig alle brs löschen. Also nl2br_revers() (nein, die gibt es nicht) anwenden.

    das ist auch erstmal einfacher. str_replace() reicht da vollkommen aus. Musst du halt nur einmalig auf alle DS anwenden. Mysql: UPDATE.

    Wenn du aber zufällig massive probleme mit ziemlich vielen leerzeilen hast, kannst du auch noch ne preg_replace funktion schreiben, die danach die anzahl der zeilenumbrüche am stück auf maximal 2 (oder 3) beschränkt.

    Kommentar


    • #3
      Wenn du aber zufällig massive probleme mit ziemlich vielen leerzeilen hast, kannst du auch noch ne preg_replace funktion schreiben, die danach die anzahl der zeilenumbrüche am stück auf maximal 2 (oder 3) beschränkt.
      Darum hab ich ja hier auch gepostet.

      Wenn ich str_replace anwende, gehen mir ja alle Zeilenumbrüche verloren,
      sofern ich Dich richtig verstanden habe.

      Bsp.:
      PHP-Code:
      <?
      $neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
      echo $neu_beschr;
      ?>
      Es dürfte also nur mittels regulärem Ausdruck funktionieren.

      Die Frage ist nur, wie dieser aussehen muss.

      lg

      Kommentar


      • #4
        Wenn ich str_replace anwende, gehen mir ja alle Zeilenumbrüche verloren, sofern ich Dich richtig verstanden habe.
        nein. Du sollst die brs löschen. das heißt aber nicht, dass du auch die Zeilenumbrüche löschst. Dazwischen ist ein unterschied.

        Bsp.: echo $neu_beschr;
        Du meinst also, dass in $neu_beschr; keine umbrüche mehr drin sind? Dann guck dir mal bitte den HTML-Quelltext an.

        Es dürfte also nur mittels regulärem Ausdruck funktionieren.
        Die Frage ist nur, wie dieser aussehen muss.
        Nein, wirst du jetzt sehen.

        Kommentar


        • #5
          Also ein Stückchen bin ich schon weitergekommen.

          PHP-Code:
          <?
          $neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
          $neu_beschr=trim($neu_beschr);
          //$neu_beschr=preg_replace("/\n{2,}/","\n",$neu_beschr);
          $neu_beschr=nl2br($neu_beschr);

          echo $neu_beschr;
          ?>
          Ergebnis schaut nun so aus:

          Actionfilm, USA 1974
          (Mr. X)



          Text 1
          Text 2,3,4

          Eventuelle Leerzeilen am Ende sind so schonmal Geschichte.

          Letztes Problem:

          Mit welcher Regex kann ich mehr als 2 \n durch 2 ersetzen?
          Lerraum zwischen "Mr. X" und "Text 1".

          Danke für Deine Hilfe!

          lg,
          Max

          Kommentar


          • #6
            wie sieht dein ansatz aus? unser regex tutorial gelesen (von Sky)?

            Kommentar


            • #7
              Hab die Lösung schon

              PHP-Code:
              <?
              $neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
              $neu_beschr=trim($neu_beschr);
              $neu_beschr=preg_replace("/\n\r+/"," ",$neu_beschr);
              $neu_beschr=nl2br($neu_beschr);

              echo $neu_beschr;
              ?>
              Danke und liebe Grüße!

              Kommentar


              • #8
                sieht gut aus,

                aber: den code hier sollst du nur einmalig aufrufen, nicht bei jeder ausgabe.
                PHP-Code:
                $neu_beschr=str_replace("<br />","",$erg["Beschreibung"]);
                $neu_beschr=trim($neu_beschr); 

                Kommentar

                Lädt...
                X