ghostt: regex alle leerzeichen WENN mehr als 1 entfernen

in meinem text sind überflüssige leerzeichen vorhanden zwischen wörtern manchmal sogar ca 2-6 .
wie kann ich diese überflüssigen entfernen?

Mein Lösungsansatz:
$somecontent = ereg_replace("^[/s]{2,}$","",$somecontent);
< wenn mehr als 2 leerzeichen dann ersetzen durch nix. >

  1. habe es jetzt so gelöst:

    $somecontent = ereg_replace("[ \s]{2,20}","",$somecontent);

    1. nun habe ich aber das problem das hinter dem satz ein leerzeichen manchmal steht wie bekomme ich diese weg?

      lösungsansatz:

      $somecontent = ereg_replace("[ \s]+$","",$somecontent);

      http://www.regular-expressions.info/examples.html unter: "Trimming Whitespace"
      funzt bei mir irgendwie nicht! ...
      mfg

      1. ok bin heute nacht zu voreilig alles mit einem replace gelöst

        $somecontent = ereg_replace("[ ]{2,20}","",$somecontent);

        hoffe der ist gültig und gibt keine fehler aus...

        1. Hi,

          ok bin heute nacht zu voreilig alles mit einem replace gelöst
          $somecontent = ereg_replace("[ ]{2,20}","",$somecontent);

          Müßte da nicht noch der g-Modifier gesetzt werden, damit nicht nur das erste Vorkommen ersetzt wird?

          Da die ereg*-Funktionen deprecated sind und wohl demnächst entfernt werden, solltest Du auf die preg*-Funktionen umstellen.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hallo,

            ok bin heute nacht zu voreilig alles mit einem replace gelöst
            $somecontent = ereg_replace("[ ]{2,20}","",$somecontent);

            Müßte da nicht noch der g-Modifier gesetzt werden, damit nicht nur das erste Vorkommen ersetzt wird?

            nein, Modifier gibt es nur bei PCRE (vgl. man regex).

            Da die ereg*-Funktionen deprecated sind und wohl demnächst entfernt werden, solltest Du auf die preg*-Funktionen umstellen.

            Das zum einen; zum anderen ist der RegEx fehleranfällig und darüber hinaus auch nicht effizient. Folgende simple Funktion benötigt weder Erweiterungen noch ist sie möglicherweise fehlerbehaftet:

            function trimspace($s){  
            	$c=strlen($s);  
            	$r='';  
            	$d=false;  
            	  
            	for($i=0;$i<$c;$i++){  
            		if($s{$i}==' '){  
            			if($d){  
            				continue;  
            			}  
            			$d=true;  
            		}  
            		else	$d=false;  
            		$r.=$s{$i};  
            	}  
            	return($r);  
            }
            

            Gruß aus Berlin!
            eddi

            1. Hi,

              ok bin heute nacht zu voreilig alles mit einem replace gelöst
              $somecontent = ereg_replace("[ ]{2,20}","",$somecontent);
              Müßte da nicht noch der g-Modifier gesetzt werden, damit nicht nur das erste Vorkommen ersetzt wird?
              nein, Modifier gibt es nur bei PCRE (vgl. man regex).

              Ok, da ich die ereg-Funktionen eh nicht nutze, hab ich mich nicht näher beschäftigt - und daher ja auch nicht behauptet, daß der modifier benötigt wird ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              1. Re:

                Müßte da nicht noch der g-Modifier gesetzt werden, damit nicht nur das erste Vorkommen ersetzt wird?
                nein, Modifier gibt es nur bei PCRE (vgl. man regex).
                ..und daher ja auch nicht behauptet, daß der modifier benötigt wird ...

                Entschuldige bitte, dass ich Deine Frage beantwortet hatte!

                Gruß aus Berlin!
                eddi

            2. hi,

              Das zum einen; zum anderen ist der RegEx fehleranfällig und darüber hinaus auch nicht effizient. Folgende simple Funktion benötigt weder Erweiterungen noch ist sie möglicherweise fehlerbehaftet:

              Hmm, warum nicht so:
              explode am Leerzeichen
              evntl. trim danach
              implode

              Hotti

              1. Hmm, warum nicht so:
                explode am Leerzeichen
                evntl. trim danach
                implode

                oder so:
                Bohrer in Bohrmaschine
                Loch ins Knie
                Milch reinfüllen

              2. Hallo Rolf,

                Hmm, warum nicht so:
                explode am Leerzeichen
                evntl. trim danach
                implode

                ist beispielsweise am Anfang ein/mehrere Leerzeichen, musst Du ganz schön rudern, um allein diesen Sonderfall zu realisieren. Ein explode()-generiertes Datenfeld ist komplexer als eine Zeichenkette, die man Zeichen für Zeichen abklappert (was auch noch schneller arbeitet, als es ereg_replace() tut).

                Gruß aus Berlin!
                eddi

                1. hi Eddi,

                  ist beispielsweise am Anfang ein/mehrere Leerzeichen, musst Du ganz schön rudern, um allein diesen Sonderfall zu realisieren.

                  naja, dafür gibts doch trim(), ltrim(), rtrim().

                  Mal unabhängig von PHP: Mit Perl hab ich auch schonmal Stichwortverzeichnisse erstellt. Dazu muss der Text in Worte gesplittet werden und das geht mit split('am Leerzeichen') einwandfrei (wie sonst *g).

                  Und mit einem Hash-Slice hab ich dann die Stopwords rausgeschmissen, das geht erst ab, da liegen die Stärken von Perl ;-)

                  Viele Grüße aus Baden-Württemberg,
                  Horst Huber (mit der Lizenz zum Pfeiferauchen)

                  1. Re:

                    naja, dafür gibts doch trim(), ltrim(), rtrim().

                    bitte betrachte bei denen Überlegungen doch mal das Ergebnis von explode(' ',$string);!

                    ...Hash-Slice...
                    Horst Huber (mit der Lizenz zum Pfeiferauchen)

                    Rolf, manchmal solltest Du eben kein Canabis konsumieren. *scnr*

                    Guten Rausch ins Neue Jahr!
                    eddi

      2. Hi!

        nun habe ich aber das problem das hinter dem satz ein leerzeichen manchmal steht wie bekomme ich diese weg?

        Für das Stringende und den Stringanfang und beide Seiten gibt es rtrim(), ltrim() und trim().

        Lo!

    2. Hi,

      habe es jetzt so gelöst:

      gelöst?

      $somecontent = ereg_replace("[ \s]{2,20}","",$somecontent);

      Der Ausdruck findet alle Stellen, wo mehr als ein Whitespace-Zeichen steht, und löscht diese Zeichen (ersetzt sie durch nichts). Wolltest du an diesen Stellen nicht *genau ein* Leerzeichen stehenlassen? - Dann ersetze nicht durch nichts, sondern durch genau ein Leerzeichen.

      Die Begrenzung auf maximal 20 Whitespaces ist Absicht? Wenn nicht, lass die Obergrenze einfach weg.

      Und bist du sicher, dass du alle Whitespace-Zeichen (Blank, Zeilenumbruch, Tab) gleich gehandeln willst? Also beispielsweise Zeilenumbrüche auch eliminieren, wenn sie als Gruppe mit einem Blank auftreten? Im Betreff schreibst du nur von Leerzeichen. Either way, die Zeichenklasse [ \s] ist trotzdem redundant, denn \s schließt das Leerzeichen bereits mit ein.

      So long,
       Martin

      --
      Um mit einem Mann glücklich zu werden, muss eine Frau ihn sehr gut verstehen und ein bisschen lieben.
      Um mit einer Frau glücklich zu werden, muss ein Mann sie sehr lieben und darf gar nicht erst versuchen, sie zu verstehen.