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);
Warum ersetzt du nicht einfach \s+ durch ""?
onemorenerd
30-11-2007, 00:45
Mit Kanonen auf Spatzen ...
$text = str_replace(' ', ' ', $text);
Original geschrieben von onemorenerd
$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:$text = preg_replace('/(\\s)(\\s+)/', $1, $text);, oder wenn es nur um Leerzeichen geht:$text = preg_replace('/ +/', ' ', $text);
jahlives
30-11-2007, 09:40
@topicstarter
Manual lesen (http://us.php.net/manual/en/function.preg-replace.php) könnte dich weiterbringen. V.a. Beispiel Nummer 5, wo es ums Ersetzen von mehreren Whitespaces geht.
So müsste es gehen
$str = preg_replace('/\\s\\s+/', ' ', $str);
@H2O
Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem Leerzeichen :dontknow:
Gruss
tobi
Original geschrieben von jahlives
Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem Leerzeichen :dontknow:Da hast du natürlich recht, ich ging davon aus, dass das Bischen Overhead verkraftbar wäre. Ist es aber nicht, $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'
@H2O
Greift dein zweiter RegExp nicht zu oft? Ersetze ein Leerzeichen mit einem LeerzeichenIm 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. ;)
okay, h2os aussage wäre eigentlich nichtsmehr hinzuzufügen
onemorenerd
30-11-2007, 15:38
Original geschrieben von H2O
Damit ersetzst du x Leerzeichen mit ceil(x/2). Das dürfte nicht der gewünschte Effekt sein.
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.