[PHP]Wyrażenie regularne usuwające wielokrotność spacji


(Grzesie K) #1

Witam, mam problem z wyrażeniem regularnym, które by usuwało wielokrotność spacji. Zapewne będzie to preg_replace, lecz jak to napisać? Czytałem wiele poradników, kursów, lecz nie mogę zrozumieć. Mógłby ktoś pomóc?


(Tomek Matz) #2

Spróbuj tego. Ja przetestować nie mogę, bo nie mam php zainstalowanego (i mi się w sumie teraz nie chce instalować :D)

<?php

$str = 'foo o';

$str = preg_replace('/\s\s+/', '', $str);

echo $str;

?>

(Grzesie K) #3

W twoim przykładzie działa, lecz jest ale… Nie akceptuje liczb. Jeżeli się pojawią kasuje wszystkie spacje pomiędzy nimi.


(Tomek Matz) #4

No to musisz dokładnie sprecyzować, co ma robić to wyrażenie regularne. Bo z początkowego opis wynika, że jedynie usuwać wszystkie spacje w stringu. Możesz zarzucić jakimś przykładowym stringiem to się temu przyjrzę.


(Grzesie K) #5

Jako $str podaje

1 2 3

Zwraca:

123

a powinno

1 2 3

Mogę :smiley:

Terrorists *|vVv|*IvO.ory 1 1 0 0 50 6 185 99 0 10

Terrorists MrK 1 1 0 0 50 6 246 127 0 0

Terrorists Grzesie.k 0 0 0 0 0 5 0 0 0 0

Terrorists FoV//Mato 0 0 0 0 0 5 0 0 0 0

Terrorists Novice 1 1 0 0 50 4 114 161 0 0

Terrorists elmo. 0 1 0 0 0 4 0 117 0 -1

Terrorists =]X-BlooD[=G.I- 0 1 0 0 0 4 28 196 0 -1

Terrorists Totals 3 5 0 0 37 5 573 700 0 8


Specops wazzup?! 1 0 0 1 100 6 85 0 11 8

Specops gonzoISauBaer 1 0 0 0 100 6 141 0 0 1

Specops Henry 1 0 0 0 100 5 30 0 25 1

Specops gonzo|Korni 1 1 0 0 50 5 216 114 0 0

Specops Plante verte 0 0 0 0 0 4 0 0 0 0

Specops gonzo|Sh1Fty. 1 1 0 0 50 4 186 213 0 0

Specops Ryan 0 1 0 0 0 4 42 246 0 -1

Specops Totals 5 3 0 1 62 4 700 573 36 9

Chciałem to przekształcić na csv., ale na początku zlikwidować wielokrotność spacji.


(Tomek Matz) #6
<?php

$str = '1 2 3';

$str = preg_replace('/\s\s+/', ' ', $str);

echo $str;

?>

(Grzesie K) #7

Niestety nadal jest źle… :frowning: Zwraca:

Terrorists *|vVv|*IvO.ory110050618599010

Terrorists MrK110050624612700

Terrorists Grzesie.k0000050000

Terrorists FoV//Mato0000050000

Terrorists Novice110050411416100

Terrorists elmo.01000401170-1

Terrorists =]X-BlooD[=G.I-010004281960-1

Terrorists Totals350037557370008Specops wazzup?!1001 1006850118

Specops gonzoISauBaer1000 1006141001

Specops Henry1000 1005300251

Specops gonzo|Korni110050521611400

Specops Plante verte0000040000

Specops gonzo|Sh1Fty.110050418621300

Specops Ryan010004422460-1

Specops Totals5301624700573369

(athei) #8
$str = str_replace(' ', ' ', $str);

(Grzesie K) #9

niestety nie :smiley: To byłoby za proste. Ilość spacji jest zmienna, więc sposób nie działa prawidłowo. Musiał bym go wprowadzić w pętlę- ale to trwa. Wyrażenie regularne byłoby idealne.


(athei) #10

, czy ty wiesz w ogóle co to robi czy od razu strzelasz? Najlepiej zajrzyj do manuala i zacznij sam cośrobić, bo każde z podanych tu rozwiązań działa.


(Grzesie K) #11

Robiłem długo! A żadne z podanych tu rozwiązań nie działa tak jak powinno!


(Tomek Matz) #12
$str = preg_replace('/[\t]+/', ' ', $str);

(Grzesie K) #13

DZIAŁA! :smiley: Dzięki wielki!


(Tomek Matz) #14

lajt, no żeby zrobić z tego csv-a teraz to wystarczy spacje na ; zamienić i gotowe. Chyba, że “Terrorists FoV//Mato” ma być jedną kolumną?


(Grzesie K) #15

Teraz już sobie poradzę :smiley:


(Pj) #16

$string = ereg_replace(’ +’,’ ',$string)


(GediMaster) #17

ereg_replace() ma status deprecated. Wielokrotność spacji można usunąć także w ten sposób:

$string = preg_replace('/[]+/', ' ', $string);