Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [wolontariat] Użycie preg_replace / wyrażenia regularne
Forum PHP.pl > Inne > Giełda ofert > Poszukuję
DawPi
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
sowiq
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
DawPi
Witaj,
dziękuję za pomoc, ale testując to pokazuje się biała strona. Wiesz co jest nie tak?
sowiq
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. ?>
melkorm
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
sowiq
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.
melkorm
wooops biggrin.gif Wpadka winksmiley.jpg zagalopowałem się - sorry ;p
DawPi
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.
sowiq
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. ?>
DawPi
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ę.
Cezar708
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.