Günther S: Regexp: einen Ausdruck genau einmal ersetzen

Hallo zusammen,

ich möchte mithilfe von preg_replace() einen bestimmten Ausdurck ("\n") genau einmal durch einen anderen ("<br>") ersetzen lassen.
Also im Prinzip möchte ich dasselbe erreichen, was die Funktion nl2br() schon macht, nur soll eben "\n\n\n" nicht zu "<br><br><br>" werden, sondern nur zu "<br>".

Ich bin mit RegExp noch ziemlich unerfahren und wäre auch dankbar über Vorschläge von guten Tutorials mit einer schrittweisen Einführung in dieses Gebiet.

Gruß,
Günther S

  1. Tag Günther.

    Also im Prinzip möchte ich dasselbe erreichen, was die Funktion nl2br() schon macht, nur soll eben "\n\n\n" nicht zu "<br><br><br>" werden, sondern nur zu "<br>".

    Verwende einen entsprechenden Quantifier.

    Siechfred

    1. Hallo Siechfried,

      Verwende einen entsprechenden Quantifier.

      das habe ich schon versucht, nämlich so:

        
      $str = preg_replace('#\n{1}#', '<br>', $str);  
      
      

      Aber \n\n\n wird damit trotzdem durch <br><br><br> ersetzt.
      Wo ist da der Wurm?

      Gruß,
      Günther

      1. Tag Günther.

        $str = preg_replace('#\n{1}#', '<br>', $str);

        
        > Aber \n\n\n wird damit trotzdem durch <br><br><br> ersetzt.  
        > Wo ist da der Wurm?  
          
        Wie ich schrieb: im Quantifier, {1} bedeutet nämlich "genau 1 mal". Willst du mehr als 1 mal, dann nimm entweder {1,} oder gleich "+". Aber das steht alles auf der von mir verlinkten Seite :-)  
          
        Übrigens, "\n" ist nicht auf allen Systemen der Zeilenumbruch, siehe hierzu [Plattformübergreifendes Handling von Zeilenumbrüchen](http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm).  
          
        Siechfred
        
        -- 
        [Codeschnipsel gefällig?](http://sniplets.anaboe.net) || [Wieder Online: Existenzgründer-FAQ](http://www.steuerwerkstatt.de/existenzgruendung.php)
        
      2. hi,

        $str = preg_replace('#\n{1}#', '<br>', $str);

          
        "Wo immer \_genau ein\_ \n auftritt, ersetze mir dieses durch <br>."  
          
        
        > Aber \n\n\n wird damit trotzdem durch <br><br><br> ersetzt.  
        > Wo ist da der Wurm?  
          
        Dass "\_genau ein\_ \n auftritt", und durch <br> ersetzt wird, passiert hier drei mal hintereinander.  
          
        Wenn du dir die von Siechfred verlinkte Seite noch mal anschaust, findest du dort auch den Quantifier +, der für "1 oder mehrere Male" steht.  
          
        Also nutze ein Suchmuster wie '#\n+#', um "ein oder mehrere aufeinanderfolgende \n" zu ersetzen.  
          
        gruß,  
        wahsaga  
          
        
        -- 
        /voodoo.css:  
        #GeorgeWBush { position:absolute; bottom:-6ft; }