Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php] Zamiana podciągów w tekscie ale..
LubieWino
post 9.12.2007, 18:47:31
Post #1





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


Mam takie chyba dość proste pytanko. zamiana ciągów znaków odbywa się przez:

str_replace ('wyraz_do_zmiany', 'wyraz_zmieniony', 'cały_text'),

czy możecie mi napisać wyrażenie które zamienia wyrazy zawierający jakiś podciąg na jakiś określony wyraz? czyli np:

chciałbym zamienić każdy z wyrazów , który zawiera w sobie podciąg 'oza', na wyraz 'domek'.

jakie powinienem wpisać wyrażenie do funkcji str_replace w pierwszej rubryce?
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 19:13:33
Post #2





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


co to są podciągi? :D
Go to the top of the page
+Quote Post
ayeo
post 9.12.2007, 19:30:34
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


  1. <?php
  2. $pattern = "#S*ozaS*#"; // pasuje do każdego wyrazu zawierajacego "oza"
  3. $text = "mala koza w kropki bordo nazywa się Soza z filmu Scareface Loozaaa Booooza!!"; // przykladowy tekst
  4. $new_text = preg_replace($pattern, "domek", $text); 
  5.  
  6. echo $text."<br />".$new_text;
  7. ?>


Ten post edytował ayeo 9.12.2007, 19:33:03


--------------------
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 20:20:16
Post #4





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


ok super dzięki !

ALE ! jest jeszcze mały problem. nie chce zeby funkcja uwzględniała wielkości liter.

a narazie jest tak, że jak napisze w texcie 'koza nazywa sie ZOZA'.
to mi tylko zamienia podciag 'oza' w wyrazie 'koza', natomiast wyraz 'ZOZA' pozostaje niezmieniony.

można to jakoś rozwiązać?
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 20:24:15
Post #5





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


  1. <?php
  2. $pattern = "#S*(oza)|(OZA)S*#";
  3. ?>
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 21:43:00
Post #6





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


O dżizys.... panowie, skupiłem sie na wilkościach liter.. a przecież w ogóle .. od początku nie tak !

NIE chodzi mi o to, że jeśli mam wyraz 'ZOZOL' to funkcja wynajduje mi podciąg 'OZO' i zamienia ten podciąg na 'domek', tak że w ostateczności jest: 'ZdomekL'
chce aby funkcja zamieniała CAŁY wyraz, a nie tylko podciąg w wyrazie, czyli w tym przypadku efekt ostateczny powinien być po prostu 'domek' ! bez początkowej litery 'Z' i końcowej 'L' .

poóżcie prosze
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 21:53:34
Post #7





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


hmmm a to jak na moją głowę już większa sztuka

pierwsze co mi przyszło na myśl to każde słowo przypisać do tablicy, sprawdzać czy występuje w nim w/w ciąg znaków
jeśli tak zamienić je na "domek"
Go to the top of the page
+Quote Post
marcio
post 9.12.2007, 21:55:02
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Chodzi o to:
  1. <?php
  2. $ciag = 'bla bla bla';
  3.  $nowy_ciag = str_replace('bla', 'Domek', $ciag);
  4.  echo($ciag.'|'.$nowy_ciag);
  5. ?>


0ps sorki chyba zle zrozumialem myslalem ze to chcialo
Cytat
chce aby funkcja zamieniała CAŁY wyraz, a nie tylko podciąg w wyrazie, czyli w tym przypadku efekt ostateczny powinien być po prostu 'domek' ! bez początkowej litery 'Z' i końcowej 'L' .

powiedziec ze dany wyraz chce zastapic na inny

Ten post edytował marcio 9.12.2007, 22:00:38


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 22:10:16
Post #9





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


nie marcio, to jest dokladnie to samo co poprzedni kod.

jak dasz $ciąg = 'bla blada grobla';

to efekt końcowy będzie 'domek domekda grodomek';

a chce w tym wypadku efekt 'domek domek domek'
Go to the top of the page
+Quote Post
marcio
post 9.12.2007, 22:17:38
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


no i wlasnie taki efekt jest biggrin.gif

P.S czekaj znowu zle przeczytalem chodzi ci o to ze obojetnie co bedzie w ciag to kazdy jego wyraz ma zmienic na domek?

Ten post edytował marcio 9.12.2007, 22:18:42


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 22:18:29
Post #11





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


EDYTOWANE
zamienione na funkcje i testowane

  1. <?php
  2. function zmien($co, $naco, $wczym)
  3. {
  4. $wyrazy = explode(' ', $wczym);
  5.  
  6. foreach($wyrazy as $wyraz)
  7. {
  8. if(eregi($co, $wyraz))
  9. {
  10. $out .= $naco.' ';
  11. }
  12. else
  13. {
  14. $out .= $wyraz.' ';
  15. }
  16. }
  17. return $out;
  18. }
  19.  
  20. $zmieniona_tresc = zmien('bla', 'Domek', 'bla blada grobla');
  21.  
  22. echo $zmieniona_tresc;
  23. ?>


Ten post edytował b_chmura 9.12.2007, 22:27:22
Go to the top of the page
+Quote Post
ayeo
post 9.12.2007, 22:32:05
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


kod, który Ci podałem w poprzdnim poście działa tak jak chcesz! Jedyne co musisz dodać to :

$text = strtolower($text);


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 22:42:15
Post #13





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Cytat(marcio @ 9.12.2007, 22:17:38 ) *
no i wlasnie taki efekt jest biggrin.gif

P.S czekaj znowu zle przeczytalem chodzi ci o to ze obojetnie co bedzie w ciag to kazdy jego wyraz ma zmienic na domek?



Cytat(ayeo @ 9.12.2007, 22:32:05 ) *
kod, który Ci podałem w poprzdnim poście działa tak jak chcesz! Jedyne co musisz dodać to :

$text = strtolower($text);


Zanim zaczniecie odpowiadać przeczytajcie w czym tkwi problem, nie rozumiem waszego działania...

~LubieWino funkcja którą Ci podałem spełnia sie w 100% jednak istnieje może jakieś inne optymalniejsze rozwiązanie, nie wiem, musisz poczekać aż jakiś specjalista sie odezwie
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 22:50:18
Post #14





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


ayeo - główna sprawa jest taka, że ten kod nie działa jak powinien, bo on nie zamienia mi całych wyrazów a jedynie podciąg wyrazów. odnasząc się do twojego przykładu, efekt końcowy zdania które podałeś jest:

'mala kdomek w kropki bordo nazywa się Sdomek z filmu Scareface Lodomekaa Booodomek!!"

a ma być:

'mala domek w kropki bordo nazywa się domek z filmu Scareface domek domek!!"

chmura.... huh ... zadziałeś teraz... musze chwile to przetestować i napisze co i jak

Ten post edytował LubieWino 9.12.2007, 22:47:46
Go to the top of the page
+Quote Post
ayeo
post 9.12.2007, 22:54:46
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Pierwszy kod właśnie tak działa!! Jeżeli zmieniłeś później $pattern; to już nie moja wina! Sprawdź to proszę!
@b_chmura to chyba Ty podałeś zły $pattern tongue.gif Co do kodu, który podałeś potem to wydaje się być spoko.

Pozdrawiam!

EDIT Forum usunęło backslashe sprzed "S" w $pattern smile.gif dlatego może nie działało smile.gif

Ten post edytował ayeo 9.12.2007, 22:56:33


--------------------
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 23:07:17
Post #16





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


hehe , ok działa:)

podejrzwałem że coś nie tak z tym zapytaniem, ale jeszcze sie z tym nie obeznałem dokładnie. dobrze ze udalo ci sie to znaleźć.

tak czy siak dzieki tobie i dzieki wszystkim !
Go to the top of the page
+Quote Post
b_chmura
post 9.12.2007, 23:10:01
Post #17





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


~ayeo zwracam honor, faktycznie po dodaniu backslashy działa jak należy

Pozdrawiam
Chmura

PS: a to głupie forum :P :D

---
Ja Ci dam glupie :P :D /~strife/
Go to the top of the page
+Quote Post
LubieWino
post 9.12.2007, 23:13:40
Post #18





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 15.10.2006

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


ale czy na pewno te backslashe usunęło forum? czy to nieuwaga ayeo?
a może specjalnie to zrobił zebyśmy mieli horror (przynajmniej ja) ;>

Ten post edytował LubieWino 9.12.2007, 23:14:28
Go to the top of the page
+Quote Post
ayeo
post 10.12.2007, 04:07:38
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


forum, bo z kodu b_chmura też usunęło tongue.gif chociaż na początku chyba jeszcze były...


--------------------
Go to the top of the page
+Quote Post
franki01
post 10.12.2007, 18:28:14
Post #20





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Najprostsza rzecz a ludzie sie mecza biggrin.gif

  1. <?php
  2. $tekst = 'abccostam lolcosstamsabc costamlolabc';
  3. $cozamienic = 'costam';
  4. $naco = 'domek';
  5.  
  6. $litery = 'ęóąśłżźćńĘÓĄŚŁŻŹĆŃa-zA-Z';
  7. $tekst = ' '.$tekst.' ';
  8. $tekst = preg_replace("(([^{$litery}])(?:[{$litery}]*?)".preg_quote($cozamienic)."(?:[{$litery}]*?)([^{$litery}]))is", '$1'.$naco.'$2', $tekst);
  9. $tekst = preg_replace("(([^{$litery}])(?:[{$litery}]*?)".preg_quote($cozamienic)."(?:[{$litery}]*?)([^{$litery}]))is", '$1'.$naco.'$2', $tekst);
  10. $tekst = substr($tekst, 1, -1);
  11. ?>


Sprawdzone i dziala. Dwa razy jest to samo preg_match, bo jak wyrazy sa kolo siebie to zamienia co drugi.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 21.09.2024 - 12:26