Ersetze mehrere Leerzeichen in einem String mit einem Leerzeichen

8

Ich habe eine Datei mit mehreren Leerzeichen zwischen den Wörtern. Ich muss die Datei säubern und vorhandene Multi-Abstandssequenzen mit nur einem Leerzeichen ersetzen. Ich habe die folgende Aussage geschrieben, die überhaupt nicht funktioniert, und es scheint, dass ich einen großen Fehler mache.

%Vor%

Meine Datei ist sehr einfach. Hier ist ein Teil davon:

%Vor%     
Mostafa Talebi 05.03.2014, 08:29
quelle

4 Antworten

19

Ihre Regex ersetzt any Anzahl der Leerzeichen (einschließlich zero ) mit einem Leerzeichen. Sie sollten nur zwei oder mehr ersetzen (schließlich ist es sinnlos, ein einzelnes Leerzeichen durch sich selbst zu ersetzen):

%Vor%     
Tim Pietzcker 05.03.2014, 08:31
quelle
3

Was ich normalerweise mache, um mehrere Leerzeichen zu bereinigen, ist:

%Vor%

Bedingungen / Hypothesen:

  1. Strings mit mehreren Leerzeichen sind selten
  2. zwei Leerzeichen sind bei weitem häufiger als drei oder mehr
  3. preg_replace ist in Bezug auf CPU
  4. teuer
  5. Kopieren von Zeichen in eine neue Zeichenfolge sollte möglichst vermieden werden

Natürlich, wenn die Bedingung # 1 nicht erfüllt ist, ist dieser Ansatz nicht sinnvoll, aber normalerweise.

Wenn # 1 erfüllt ist, aber keiner der anderen nicht (dies kann von den Daten, der Software (PHP-Version) oder sogar der Hardware abhängen), dann ist das Folgende möglicherweise schneller:

%Vor%

Wenn mehrere Leerzeichen nur in etwa 2% Ihrer Zeichenfolgen vorkommen, ist die präventive Überprüfung mit strpos wichtig, und Sie interessieren sich wahrscheinlich nicht sehr für die Optimierung der restlichen 2% der Fälle.

    
Walter Tross 05.03.2014 08:40
quelle
1

// Ihre Eingabe $ Str = „Hjhajhashsh dwddd dddd sss ddd wdd ddcdsefe xsddd SCDC yyy5ty ewewdwdewde WWWE ddr3r dce eggrg vgrg fbjb nnn bh jfvddffv mnmb weer ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t ffrr rrr ww ww ee3e iioi hj hmm mmmmm mmjm lk; '' kjmm ,,,, jjj hhh lmmlm mmmmm lklmm jlmm m ";         echo $ str. '
';

%Vor%     
EKL 05.03.2014 09:01
quelle
0

Versuchen Sie Folgendes:

%Vor%     
Wolfack 29.04.2017 20:55
quelle

Tags und Links