Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Preg_replace Raz Jeszcze
Forum PHP.pl > Forum > Przedszkole
qbba
Drobny problem z preg_replace:

Mam taki kod:

  1. <?php
  2. $test = preg_replace('/{$(.*?)}/', $cos, $string);
  3. ?>


podmienia on string "{$wartosc}"

nie wiem dlaczego php zwraca mi:
Kod
Notice: Undefined variable: wartosc in E:\Program Files\Apache Group\Apache2\htdocs\temp.php(75) : regexp code on line 2


Prosze o pomoc smile.gif

PS. Dodam jeszcze, że dla takiego wyrażenia:
  1. <?php
  2. $test = preg_replace('/{^(.*?)}/', $cos, $string);
  3. ?>


i takiego stringa "{^wartosc}" działa świetnie.
jbiz
php.ini ERROR_REPORTING ustaw na E_ALL ~E_NOTICE o ile dobrze pamietam
qbba
Twoja rada.... delikatnie mówiąc jest nie na miejscu:
1. nie dziala tak jak nalezy
2. nie biorąc pod uwage notice, uczysz się złych nawyków

Bardzo prosze o jakieś sugestie co z tym wyrażeniem jest źle... ( a dokładniej coś się pierniczy chyba z tym znaczkiem: $, tylko sam nie wiem co)
beskid
Aby w wyrażeniu regularnym PCRE użyć symboli znaczących (np. $)należy je zamarkować przy pomocy dwóch odwrotnych ukośników \\. A więc:
  1. <?php
  2. $test = preg_replace('/{$(.*?)}/', $cos, $string);
  3. ?>

Spróbuj, może o to chodzi.

Edit: U mnie działa tak i tak, więc nie wiem w czym może być problem...
qbba
niestety nadal nie to... (przy okazji to markowało się chyba jednym slashem? :|)
FiDO
Powinno sie dwoma, zreszta zobacz sobie co zwroci
  1. <?php
  2. echo '----';
  3. ?>
to zrozumiesz. W kazdym stringu (czy to w apostrofach czy cudzyslowach), zeby napisac backslasha trzeba go poprzedzic drugim backslashem. A to, ze dziala z jednym jest tylko i wylacznie pozytywnym skutkiem ubocznym tego, ze jesli po slashu nie wystepuje zaden znak specjalny (np. \n, \r, \t etc.) to jest on traktowany jako zwykly slash. Ale teraz zalozmy czysto teoretycznie, ze za jakis czas pojawi sie nowy znak specjalny w stringach, np. *, i teraz wszystkie wyrazenia zawierajace '\*' szlag trafia a autorzy zastanawiaja sie dlaczego. Tak wiec bezpieczniej i poprawniej jest dac podwojnego.
I jeszcze jedno.. potencjalny problem tyczy sie tylko stringow w cudzyslowach, poniewaz te w pojedynczych nie sa parsowane i nie posiadaja zadnych specjalnych kombinacji (pomijajac tylko to, ze aby podac apostrof lub backslasha na koncu stringa trzeba je escapowac, ale tylko w tym przypadku)

A co do Twojego problemu, to zrob przed preg_replacem
  1. <?php
  2. echo $cos.&#092;"<br>\";
  3. echo $string.&#092;"<br>\";
  4. ?>

i pokaz co wyswietlilo, bo mam dziwne przeczucie. Tymbarziej ze wyrazenie jest calkiem poprawne.
qbba
dzięki za wskazówkę... błąd był nie w tym wyrażeniu, tylko w poprzednim, (tamto wyrażenie przekazywało te zmienne aarambo.gif. (robię sobie pętle w templatach tongue.gif) )
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.