Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]preg_replace, dlaczego to nie dziala?
kapuch
post 1.07.2010, 13:52:27
Post #1





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

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


Tak jak w temacie, czemu taki kod nie dziala jak powinien (nie koloruje):
  1. $dni = array('poniedzialek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota', 'niedziela');
  2. $tekst = "Byłem w czwartek w kinie.";
  3. $tekst_kolor = preg_replace("/".$dni."/", "<font color=\"red\">".$dni."</font>", $tekst);
  4. echo $tekst_kolor;
  5.  
  6. // A taki dziala
  7. $dni = array('poniedzialek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota', 'niedziela');
  8. $tekst = "Byłem w czwartek w kinie.";
  9. $tekst_kolor = preg_replace("/".$dni[3]."/", "<font color=\"red\">".$dni[3]."</font>", $tekst);
  10. echo $tekst_kolor;
  11.  
  12. // Taki tez dziala
  13. $dni = array('/poniedzialek/', '/wtorek/', '/środa/', '/czwartek/', '/piątek/', '/sobota/', '/niedziela/');
  14. $dzien_kolor = array('poniedzialek', 'wtorek', 'środa', '<font color="red">czwartek</font>', 'piątek', 'sobota', 'niedziela');
  15. $tekst = "Byłem w czwartek w kinie.";
  16. $tekst_kolor = preg_replace($dni, $dzien_kolor, $tekst);
  17. echo $tekst_kolor;

Chodzi o to, ze w manualu wystarczy odwolanie do nazwy tablicy, a funkcja sama podstawia odpowiedni klucz, ale jak widac u mnie dziala to tylko wtedy, gdy w parametrach preg_replace podam same nazwy funkcji bez
Kod
"/".$funkcja."/", "<font color=\"red\">".$funkcja."</font>" - w tym przypadku musze juz podac klucz tablicy :/

Mozna to jakos zrobic inaczej, bo nie bawi mnie rozwiazanie z druga tablica i w kazdym kluczu dodawanie <font color>.
Prosze tez nie zwracac uwagi na semantyke kodu i uzycie <font>, ktory jest juz zdeprecjonowany - wiem o tym, podalem tylko dla przykladu.

EDIT: Poprawilem literowke w kodzie, bylo "</font"> zamiast "</font>". Ale to nie ma wplywu na moj problem, poniewaz ten kod pisalem specjalnie na potrzebe tego tematu, w oryginale mam troche inaczej i bez literowek smile.gif

Ten post edytował kapuch 1.07.2010, 14:06:29


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Wicepsik
post 1.07.2010, 14:16:31
Post #2





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


preg_replace - przykład #2


--------------------
Go to the top of the page
+Quote Post
kapuch
post 1.07.2010, 23:51:53
Post #3





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

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


Cytat(Wicepsik @ 1.07.2010, 15:16:31 ) *
preg_replace - przykład #2

No tak, wlasnie tak zrobilem w 3 kodzie, ale czy to jedyne wyjscie?
I czemu to nie dziala na tej zasadzie jak dodam przed tablica i po jakies dodatkowe atrybuty?
Na dwie tablice nie moge sobie pozwolic, bo gdyby to chodzilo tylko o dni tygodnia to bym to zrobil w ten sposob, ale tych slow kluczowych ma byc setki, takze nie wyobrazam sobie robienie drugiej tablicy z setka kluczy i dodawaniem tego <font> :/
Wiem, mozna przepuscic ta druga tablice przez foreach() i dodat atrybuty jakie potrzeba, ale jak by to wplynelo na czas wykonywania skrypty?
Przy kazdym przeladowaniu strony petla foreach wykonywala by setki przebiegow, pozniej nastepne foreach i kolejne setki przebiego zeby to pokolorowac :/
Ah kurde czemu to nie dziala tak jak powinno :/

OK z druga tablica dalem sobie rade (wyeliminowalem ja) w taki sposob:
  1. $dni = array('/(poniedzialek)/', '/(wtorek)/', '/(środa)/', '/(czwartek)/', '/(piątek)/', '/(sobota)/', '/(niedziela)/');
  2. $tekst = "Byłem w czwartek w kinie.";
  3. $tekst_kolor = preg_replace($dni, "<font color=\"red\">\\1</font>", $tekst);
  4. echo $tekst_kolor;

Teraz jeszcze cos z ta pierwsza trzeba zrobic, zeby nie trzeba bylo patternu w kazdym kluczu wklejac, bo ten tutaj to tylko przyklad, w oryginalej ten pattern jest bardziej rozbudowany, a chcialbym, aby nawet nie kumaty uzytkownik, mogl dodawac nowe klucze, bez koniecznosci wstawiana patternu pod regexa.


:/

Ten post edytował kapuch 1.07.2010, 15:33:26


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
erix
post 2.07.2010, 09:05:48
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
OK z druga tablica dalem sobie rade (wyeliminowalem ja) w taki sposob:

Przecież do tego wystarczy zwykły str_replace, po co tu pregi? winksmiley.jpg



--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kapuch
post 2.07.2010, 09:37:26
Post #5





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

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


Cytat(erix @ 2.07.2010, 10:05:48 ) *
Przecież do tego wystarczy zwykły str_replace, po co tu pregi? winksmiley.jpg

Niestety str_replace() w moim przypadku to zle wyjscie.
Uzywam bardzo rozbudowanych match'ow, te tutaj to tylko dla przykladu, zeby nie gmatwac kodu i zwrocic uwage na istote problemu.
Faktycznie gdyby mi chodzilo o zwykla podmiane czwartku na "czerwony" czwartek to str_replace() bylo by ok, ale jesli dochodzi do tego kilkanascie warunkow - kiedy ten czwartek ma byc podmieniony, to juz preg_replace zostaje.

Jak narazie problem tymczasowo rozwiazalem poprzez dodanie jednej tablicy z samymi wyrazami, i pozniej foreach'em zmieniam ta tablice na matcha.
Ale raczej to nie jest zbyt madre, jesli chodzi o wydajnosc....

Ten post edytował kapuch 2.07.2010, 09:41:50


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
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: 14.08.2025 - 02:23