ersetzen mehrerer Leerzeichen in einem string durch ein einzelnes Leerzeichen
Ich habe eine Datei mit mehrere Leerzeichen zwischen den Worten. Ich brauche, um die Datei zu bereinigen und ersetzt die bestehenden multi-spaced-Sequenzen mit einem Raum nur. Ich habe geschrieben, die folgende Anweisung, die nicht funktioniert, und es scheint, ich mache einen großen Fehler.
$s = preg_replace("/( *)/", " ", $x);
Meine Datei ist sehr einfach. Hier ist ein Teil davon:
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 w w ee3e iioi hj hmm mmmmm mmjm lk ;’’ kjmm ,,,, jjj hhh lmmmlm m mmmm lklmm jlmm m
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre regex ersetzt alle Anzahl der Räume (einschließlich null) mit einem Leerzeichen. Sollten Sie nur ersetzen Sie zwei oder mehr (schließlich ersetzt ein einziger Raum mit sich selbst ist sinnlos):
Dem, was ich normalerweise tun zu bereinigen mehrere Leerzeichen ist:
Voraussetzungen/Hypothesen:
preg_replace
ist teuer in Bezug auf CPU -Natürlich, wenn die Bedingung #1 ist nicht entsprochen werden, ist dieser Ansatz nicht sinnvoll ist, aber es ist in der Regel.
Wenn #1 erfüllt ist, aber die anderen nicht (das hängt von den Daten, der software (PHP-version) oder sogar hardware), dann kann Folgendes schneller:
Sowieso, wenn mehrere Leerzeichen erscheinen nur in, sagen wir, 2% der Streicher, das wichtigste ist, die Vorsorgeuntersuchung mit
strpos
, und Sie wahrscheinlich don ' T care viel über die Optimierung der verbleibenden 2% der Fälle.strpos
ist sicher weniger teuer als ein Aufruf anpreg_replace
preg_replace
auf den OP-Beispiel, vor allem, weil das, was dominiert, ist der Funktionsaufruf-overhead und mit einer Auflage von 15 Räume, wie in diesem Fall, diestrpos
ist 5-mal aufgerufen, und diestr_replace
4 mal. Dieses Beispiel ist absolut nicht realistisch, wenn.strpos(' ')
, während diepreg_replace
-Lösung sicherlich nicht mehr als das (und kann auch kopieren Sie die Zeichenfolge, aber das ist etwas, ich bin mir nicht sicher). Bitte beachten Sie, dass auch diese Lösung hat einenpreg_replace
- version, wo diepreg_replace
ist eingeschlossen in einstrpos
.//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 w w ee3e iioi hj hmm mmmmm mmjm lk ;" kjmm ,,,, jjj hhh lmmmlm m mmmm lklmm jlmm m";
echo $str.'
';
Folgendes versuchen: