Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenia regularne, a str_replace()
Forum PHP.pl > Forum > Przedszkole
Displace
Witam,

Chciałbym się dowiedzieć w jaki sposób mógłbym podmienić jeden jeden ciąg znaków na inny, ale(!) w którym występuje pewien element zmienny. Podam prosty przykład:
  1. <?php
  2. $var = 'orzechowe'; //Ta zmienna przyjmuje różne wartości
  3. $string = 'Ciastko $var w czekoladzie';
  4. $string = str_replace('Ciastko <?> w czekoladzie','Ciastko karmelowe w czekoladzie',$string);
  5. ?>

W miejscu <?> muszę wstawić wyrażenie regularne, które będzie oznaczało dowolny ciąg znaków [0-9a-zA-Z_], ale gdy ja to robie, występuje błąd i str_replace() nie zamienia odpowiedniego tekstu na inny. Co można z tym zrobić?
kapuch
Bo od tego masz:
  1. $wynik = preg_replace("#Ciastko [A-z0-9_]+ w czekoladzie#si","Ciastko karmelowe w czekoladzie", $tresc);
  2. echo $wynik;
ultra_18
Zasadniczo masz 2 błedy w 3 linijce swojego kodu musisz użyć cudzysłowów ("), a nie apostrofów.
Musisz również użyć funkcji http://pl.php.net/eregi_replace lub http://pl.php.net/ereg_replace zamiast str_replace.
Całość wygląda mniej więcej tak :

  1.  
  2.  
  3. $var = 'orzechowe';
  4.  
  5. $string = "Ciastko $var w czekoladzie";
  6.  
  7. $string = ereg_replace('Ciastko [a-zA-Z0-9_]+ w czekoladzie','Ciastko karmelowe w czekoladzie',$string);
  8.  
  9.  


Polecam zainteresować się wyrażeniami regularnymi.
kapuch
Cytat(ultra_18 @ 24.07.2010, 14:17:54 ) *
Zasadniczo masz 2 błedy w 3 linijce swojego kodu musisz użyć cudzysłowów ("), a nie apostrofów.
Musisz również użyć funkcji http://pl.php.net/eregi_replace lub http://pl.php.net/ereg_replace zamiast str_replace.
Całość wygląda mniej więcej tak :

  1.  
  2.  
  3. $var = 'orzechowe';
  4.  
  5. $string = "Ciastko $var w czekoladzie";
  6.  
  7. $string = ereg_replace('Ciastko [a-zA-Z0-9_]+ w czekoladzie','Ciastko karmelowe w czekoladzie',$string);
  8.  
  9.  


Polecam zainteresować się wyrażeniami regularnymi.

A teraz powiedz czym sie rozni to co Ty napisales, od tego co ja napisalem?
Pomijajac fakt ze ereg_replace jest zdeprecionowany.
Cytat
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.


Poza tym nie robi bledu z apostrofami, bo dla str_replace() nie ma roznicy, czy sa to apostrofy czy cudzyslowy!
bastard13
Nie używaj żadnych funkcji ereg, ponieważ zostały one przeznaczone do usunięcia. Zamiast tego preg. http://pl.php.net/manual/en/book.pcre.php
Displace
Dzięki, kapuch.
Klikam w odpowiedni przycisk, zgodnie z prośbą. Można zamknąć.
ultra_18
Cytat(kapuch @ 24.07.2010, 14:39:23 ) *
Poza tym nie robi bledu z apostrofami, bo dla str_replace() nie ma roznicy, czy sa to apostrofy czy cudzyslowy!



W to nie wątpię, chodzi o sposób parsowania i w tym przypadku akurat nie chodziło o str_replace tylko o 2 i 3 linijkę kodu z pierwszego posta tak jak to wcześniej napisałem.

Wiadomo, że wyrażenia PCRE są lepsze od POSIX. Użyłem funkcji ereg(/i)_replace, ponieważ jest ona bliźniaczo podobna do str_replace, jednak odradzam jej stosowanie.
kapuch
Co do linijki 3 to sie zgodze, nie zauwazylem tego winksmiley.jpg
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.