Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] usunięcie spacji
ro6erto
post 4.07.2010, 13:15:13
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


Witam, mam pytanie jak napisać przykład, który usunie niepotrzebne spacje np w tekście:
Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić !

Docelowo chciałbym otrzymać:

Ala ma kota, kot ma na imię Bolek, Bolek lubi się bawić!
Próbowałem to zrobić w następujący sposób ale niestety lipa..
  1. $string= "Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić ! ";
  2. $string= str_replace('^ [,!?;.]', substr($string, 2), $string);


Moja idea była tak żeby znajdowano ciąg ' !' lub ' x' gdzie x jest dowolnym znakiem a następnie ciąg ten był obcinany od początku o jeden znak, tak aby pozostawał sam znak 'x'
Go to the top of the page
+Quote Post
bastard13
post 4.07.2010, 13:22:08
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


str_replace() nie obsługuje wyrażeń regularnych, musisz użyć preg_replace()
http://php.net/manual/en/function.preg-replace.php


--------------------
Go to the top of the page
+Quote Post
ro6erto
post 4.07.2010, 13:54:40
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


zrobiłem tak
  1. $string= "Ala ma , kota ? a nawet może mieć ich pięć ";
  2. $a = preg_replace('^[,?]$', '^[,?]$' , $string);
i nie działa sad.gif jak powinna prawidłowo wyglądać składnia takiego wyrażenia regularnego ?
Go to the top of the page
+Quote Post
bastard13
post 4.07.2010, 14:20:33
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Tutaj masz wszystko na temat wyrażeń regularnych:
http://www.php.net/manual/en/reference.pcr...tern.syntax.php


--------------------
Go to the top of the page
+Quote Post
ro6erto
post 4.07.2010, 14:54:57
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


troche tego nie rozumiem....
jak w takim razie zapisać ciąg ' x' w postaci wyrażenia regularnego?
gdzie x jest dowolnym znakiem ?!.,;: itp.
Go to the top of the page
+Quote Post
Fifi209
post 4.07.2010, 15:08:05
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(ro6erto @ 4.07.2010, 15:54:57 ) *
troche tego nie rozumiem....
jak w takim razie zapisać ciąg ' x' w postaci wyrażenia regularnego?
gdzie x jest dowolnym znakiem ?!.,;: itp.


. to dowolny znak
* dowolna ilość powtórzeń

zamiana:

  1.  
  2. str_replace(' ', '', $tekst);
  3.  


Nie trzeba używać wyrażeń tutaj.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
ro6erto
post 4.07.2010, 15:26:30
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 7.10.2006

Ostrzeżenie: (0%)
-----


ale czy w tym przypadku nie będzie tak że pousuwa spacje tam gdzie nie powinno tzn między wyrazami?

Nie ma usuwać dowolnego znaku tylko konkretne: ?!;:.,-+=><
Czyli ma zamienić ciąg ' x' na ciąg bez spacji czyli 'x' gdzie x jest jednym ze znaków wymienionym wyżej

Ten post edytował ro6erto 4.07.2010, 15:28:13
Go to the top of the page
+Quote Post
Fifi209
post 4.07.2010, 15:56:17
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


To musisz sobie określić gdzie ma usuwać te spacje... to już wyrażenia.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
kapuch
post 4.07.2010, 16:06:40
Post #9





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Cytat(ro6erto @ 4.07.2010, 16:26:30 ) *
ale czy w tym przypadku nie będzie tak że pousuwa spacje tam gdzie nie powinno tzn między wyrazami?

Nie ma usuwać dowolnego znaku tylko konkretne: ?!;:.,-+=><
Czyli ma zamienić ciąg ' x' na ciąg bez spacji czyli 'x' gdzie x jest jednym ze znaków wymienionym wyżej

to zrob tak:
  1. $dane = str_replace(" ,",",", $dane);

Tam pierw jest spacja+przecinek i zamieniasz to na sam przecinek, wtedy zwyklych spacji ci nie ruszy smile.gif

A wyrazenie regularne powinno wygladac CHYBA tak:
  1. $dane = preg_replace("/\s\,/", ",", $dane);

A jesli nie chodzi tylko o przecinek, to tak:
  1. $dane= preg_replace("/\s(.+?)/", "\\1", $dane); // usuwa spacje przed kazdym znakiem
  2. // albo tak
  3. $dane = preg_replace("/\s(\W+)/", "\\1", $dane); // usuwa spacje przed kazdym znakiem innym niz word
  4. //albo i tak
  5. $dane = preg_replace("/\s([\,\.]+)/", "\\1", $dane); // usuwa spacje przed przecinkiem lub kropka

To moje przyklady, byc moze sa zle (dopiero sie ucze regexa), ale warto poprobowac.

EDIT:
Bawie sie akurat preg_replace, wiec sprawdzilem swoje wypociny i ten match:
  1. $dane = preg_replace("/\s([\,\.]+)/", "\\1", $dane);

zalatwi twoj problem (dziala), teraz wystarczy ze dodasz pomiedzy [ ] inne znaki, ktore maja byc brane pod uwage (poprzedzajac \) i wszystko ladnie podmienia smile.gif
Pozdrawiam

Pan nizej tez podal dobre rozwiazanie.

Ten post edytował kapuch 4.07.2010, 17:23:37


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
muk4
post 4.07.2010, 16:54:10
Post #10





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Spróbuj tak:
  1. <?php
  2. $string = 'Ala ma kota , kot ma na imię Bolek , Bolek lubi się bawić !'; //tekst do sprawdzenia
  3. $array1 = array(' <',' >', ' =', ' +',' -', ' ;', ' !', ' ?', ' .', ' ,', ' :'); //tablica która zawiera ciągi których ma szukać funkcja
  4. $array2 = array('<','>', '=', '+','-', ';', '!', '?', '.', ',', ':'); //tablica która zawiera znaki które mają być zamienione z tymi w tablicy 1
  5.  
  6. $var = str_replace($array1, $array2, $string); //zapisanie wyniku operacji do zmiennej $var
  7. echo $var; // "Ala ma kota, kot ma na imię Bolek, Bolek lubi się bawić!"
  8. ?>


Lepiej nie potrafię tego prostego kodu opisać.

Ten post edytował muk4 4.07.2010, 16:59:00
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.06.2025 - 15:28