Reguläre Ausdrücke - mehrere Leerzeichen durch eines ersetzen

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

  • Reguläre Ausdrücke - mehrere Leerzeichen durch eines ersetzen

    Wie ersetze ich mehrer Leerzeiche in einem string durch nur eines?
    Ich habe so etwas probiert. Es geht jedoch nicht.

    $text = preg_replace("/(\s.)(\s+)/", '$1', $text);

  • #2
    Warum ersetzt du nicht einfach \s+ durch ""?

    Kommentar


    • #3
      Mit Kanonen auf Spatzen ...
      PHP-Code:
      $text str_replace('  '' '$text); 

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        PHP-Code:
        $text str_replace('  '' '$text); 
        Damit ersetzst du x Leerzeichen mit ceil(x/2). Das dürfte nicht der gewünschte Effekt sein.

        Andererseits ist
        Original geschrieben von janein
        Es geht jedoch nicht.
        keine Fehlerbeschreibung.

        So müsste es aber gehen:
        PHP-Code:
        $text preg_replace('/(\\s)(\\s+)/', $1$text); 
        , oder wenn es nur um Leerzeichen geht:
        PHP-Code:
        $text preg_replace('/ +/'' '$text); 
        Gruss
        H2O

        Kommentar


        • #5
          @topicstarter
          Manual lesen könnte dich weiterbringen. V.a. Beispiel Nummer 5, wo es ums Ersetzen von mehreren Whitespaces geht.
          So müsste es gehen
          PHP-Code:
          $str preg_replace('/\\s\\s+/'' '$str); 
          @H2O
          Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem Leerzeichen
          Gruss

          tobi
          Zuletzt geändert von jahlives; 30.11.2007, 09:49.
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Original geschrieben von jahlives
            Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem Leerzeichen
            Da hast du natürlich recht, ich ging davon aus, dass das Bischen Overhead verkraftbar wäre. Ist es aber nicht,
            PHP-Code:
            $text preg_replace('/  +/'' '$text); 
            ist bedeutend schneller. Beides ist allerdings schneller als deine Version.
            => Wenn nur Leerstellen gefragt sind, auch diese angeben, andernfalls halt '\s'
            Gruss
            H2O

            Kommentar


            • #7
              @H2O
              Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem Leerzeichen
              Im Worstcase wird halt jedes einzelne Leerzeichen ersetzt, ist sicher nicht 100% optimal, aber am Ergebnis ändert das erstmal nichts und bei janeins vorhaben wird er wohl kaum Rücksicht auf die performance nehmen müssen.

              EDIT:
              okay, h2os aussage wäre eigentlich nichtsmehr hinzuzufügen

              Kommentar


              • #8
                Original geschrieben von H2O
                Damit ersetzst du x Leerzeichen mit ceil(x/2). Das dürfte nicht der gewünschte Effekt sein.
                PHP-Code:
                while (strpos($text'  ') !== false$text str_replace('  '' '$text); 
                Läuft in der Form bestimmt schneller als preg_replace(). Wahrscheinlich auch dann noch, wenn man mit Arrays arbeitet um Tabs und sonstige Formen von Whitespace zu erschlagen.

                Kommentar

                Lädt...
                X