Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [wolontariat] Użycie preg_replace / wyrażenia regularne
DawPi
post 15.11.2008, 18:05:50
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.05.2007
Skąd: Kraków

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


Witam,
na wstępie powiem, że nigdy nie miałem z nimi do czynienia i praktycznie 'nie wiem z czym to się je'. Dlatego ten mój wpis tutaj, podejrzewam, że dla osoby korzystającej z wyrażeń regularnych będzie to proste zadanie.

Otóż,
chciałbym kod na sprawdzenie całego bloku tekstu i zamianę określonych słów na inne tylko jeśli to będą całe słowa, nie słowa 'w słowach'. Przykład:

'kokiet' - zamienia na 'kobieta' tylko jeśli " On to był niezły kokiet", ale nie zamieni w zdaniu "Skokietuj mnie".
Oczywiście zdania wymyślone na poczekaniu smile.gif

Idea jest taka - by uwzględniało 'spacje'.

Jeśli ktoś mnie zrozumiał i jest chętny mi pomóc, proszę się nie krępować smile.gif

Pozdrawiam,
DawPi


--------------------
intermedia - profesjonalne rozwiązania Invision Power Board
Go to the top of the page
+Quote Post
sowiq
post 15.11.2008, 18:33:03
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Ja bym to zrobił tak:

  1. <?php
  2. $txt = "On to był niezły kokiet. Skokietuj mnie. Skokietuj mnie On to był niezły kokiet asfdg";
  3.  
  4. echo zamien($txt, "kokiet", "kobieta");
  5.  
  6. function zamien($txt, $szukane, $slowo){ // zamien: $txt - w czym, $szukane - co, $slowo - na co
  7.    return preg_replace("/()($szukane)([,. ])/u", "$1$slowo$3", $txt);
  8. }
  9. ?>


Jeśli chcesz zamianę z automatycznym uwzględnieniem wielkości znaków, to sprawa się trochę komplikuje, ale też jest do zrobienia smile.gif

Ten post edytował sowiq 15.11.2008, 18:33:54
Go to the top of the page
+Quote Post
DawPi
post 15.11.2008, 18:42:01
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.05.2007
Skąd: Kraków

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


Witaj,
dziękuję za pomoc, ale testując to pokazuje się biała strona. Wiesz co jest nie tak?


--------------------
intermedia - profesjonalne rozwiązania Invision Power Board
Go to the top of the page
+Quote Post
sowiq
post 15.11.2008, 18:44:50
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Nie mam pojęcia - u mnie działa.

Wklej na początku pliku:
Kod
error_reporting(E_ALL);
i pokaż co wywala.

Tutaj masz szybszą wersję poprzedniego kodu:
  1. <?php
  2. function zamien2($txt, $szukane, $slowo){
  3.    $txt = str_replace(" ".$szukane." ", $slowo, $txt);
  4.    $txt = str_replace(" ".$szukane.".", $slowo, $txt);
  5.    $txt = str_replace(" ".$szukane.",", $slowo, $txt);
  6.  
  7.    return txt;
  8. }
  9. ?>


Ten post edytował sowiq 15.11.2008, 18:45:08
Go to the top of the page
+Quote Post
melkorm
post 15.11.2008, 18:46:19
Post #5





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


nie widze w czym problem :
  1. <?php
  2. $txt = "On to był niezły kokiet. Skokietuj mnie. Skokietuj mnie On to był niezły kokiet asfdg";
  3. echo str_replace(" kokiet ", " kobieta ", $txt);
  4. ?>


wystarczyło dać spacje ;p


--------------------
Go to the top of the page
+Quote Post
sowiq
post 15.11.2008, 18:48:18
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(melkorm @ 15.11.2008, 18:46:19 ) *
wystarczyło dać spacje ;p

Nie wystarczyło. Możesz mieć ' kokiet. ', czyli na końcu zdania - wtedy nie zadziała. Po szukanym słowie możesz mieć 3 rzeczy - spację, kropkę i przecinek.

BTW: sam podałeś przykład stringu, dla którego funkcja nie działa poprawnie.

Ten post edytował sowiq 15.11.2008, 18:49:27
Go to the top of the page
+Quote Post
melkorm
post 15.11.2008, 18:49:17
Post #7





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


wooops biggrin.gif Wpadka winksmiley.jpg zagalopowałem się - sorry ;p


--------------------
Go to the top of the page
+Quote Post
DawPi
post 15.11.2008, 18:59:39
Post #8





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.05.2007
Skąd: Kraków

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


Nic nie wywala, żadnego błędu ohmy.gif

Korzystam z XAMPPa, jeśli ma to jakieś znaczenie winksmiley.jpg

Tak, ten kod ze spacjami nie jest dobry, już go przerabiałem.

Natomiast ta druga funkcja zamien2() prawie, że dobrze, ale zwraca słowo bez spacji na początku. A powiedz - bo owe słowo może być również na początku zdania. Wtedy tego nie uwzględni, a powinno wg mojego zamysłu.


--------------------
intermedia - profesjonalne rozwiązania Invision Power Board
Go to the top of the page
+Quote Post
sowiq
post 15.11.2008, 19:06:24
Post #9





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Final version smile.gif
  1. <?php
  2. echo zamien($w_czym, $co, $na_co);
  3.  
  4. function zamien($txt, $szukane, $slowo){
  5.    $txt = zamien2($txt, ucfirst($szukane), ucfirst($slowo));
  6.    $txt = zamien2($txt, $szukane, $slowo);
  7.    
  8.    return $txt;
  9. }
  10. function zamien2($txt, $szukane, $slowo){
  11.    $txt = str_replace(" ".$szukane." ", " ".$slowo." ", $txt);
  12.    $txt = str_replace(" ".$szukane.".", " ".$slowo.".", $txt);
  13.    $txt = str_replace(" ".$szukane.",", " ".$slowo.",", $txt);
  14.  
  15.   return $txt;
  16. }
  17. ?>


Ten post edytował sowiq 15.11.2008, 19:11:04
Go to the top of the page
+Quote Post
DawPi
post 15.11.2008, 19:28:56
Post #10





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.05.2007
Skąd: Kraków

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


Bardzo dziękuję, wygląda na OK! smile.gif Jeśli nie na pewno się obejrzę.

Wiedziałem, że prosząc o pomoc tutaj nie zawiodę się.


--------------------
intermedia - profesjonalne rozwiązania Invision Power Board
Go to the top of the page
+Quote Post
Cezar708
post 15.11.2008, 21:08:35
Post #11





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


tak na marginesie... to czy nikt z Was nie słyszał o \b? W wyrażeniach regularnych?

na przykład mała modyfikacja i trzeba się martwić czy to będzie słowo przed kropką przecinkiem czy tam cudzysłowiem:

  1. <?php
  2. function zamien($txt, $szukane, $slowo){
  3.  return preg_replace("/b$szukaneb/i", $slowo, $txt);
  4. }
  5. ?>


pozdrawiam

Ten post edytował Cezar708 15.11.2008, 21:09:05
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: 6.07.2025 - 10:23