Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parsowanie tablicy z preg_replace?
LamaMASTER
post
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Zrobiłem sobie taką funkcję:
  1. <?php
  2.  
  3. function [...]
  4. {
  5. $szukaj = array (
  6. "#\[(.*?)\]#si"
  7. );
  8. $zamien = array (
  9. "echo '\\1';"
  10. );
  11. return preg_replace($szukaj, $zamien, [...]);
  12. }
  13.  
  14. ?>

Specialnie dodałem po jednej wartości do tablic. Działa on w ten sposób, że przy zastosowaniu funkcji zamienia mi np. [cokolwiek] na "echo 'cokolwiek'". Problem w tym, że preg_replace nie parsuje php i dlatego moje "echo 'cokolwiek'" pozostaje widoczne w kodzie (nawet jeżeli dodam <? i ?> to też je widać). Pomyślałem więc o eval. Zrobiłem wpierw tak:
  1. <?php
  2.  
  3. function [...]
  4. {
  5. $szukaj = array (
  6. "#\[(.*?)\]#si"
  7. );
  8. $zamien = array (
  9. "echo '\\1';"
  10. );
  11. $wynik = preg_replace($szukaj, $zamien, [...]);
  12. return eval($wynik);
  13. }
  14.  
  15. ?>

Ale wtedy miałem parse error gdy kod zawierał np. normalny tekst czy tagi html. Pomyślałem więc o evaluowaniu samej tablicy zamień:
  1. <?php
  2.  
  3. return preg_replace($szukaj, eval($zamien), [...]);
  4.  
  5. ?>

Ale też miałem byki, bo eval nie parsuje tablic. Zdecydowałem się na najwolniejszą z możliwości:
  1. <?php
  2.  
  3. function [...]
  4. {
  5. $szukaj = array (
  6. "#\[(.*?)\]#si"
  7. );
  8. $zamien = array (
  9. eval("echo '\\1';")
  10. );
  11. return preg_replace($szukaj, $zamien, [...]);
  12. }
  13.  
  14. ?>

Teraz tekst jest parsowany, ale mam błędy w wynikach, ponieważ tekst zostaje parsowany ZANIM preg_replace go zamieni, czyli w rezultacie widzę "/1" zamiast "cokolwiek".
Może zadanie trudne - ale jak sobie poradzić z tym, żeby preg_replace najpierw zamieniało, a potem TYLKO zamieniony tekst został parsowany?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LamaMASTER
post
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Cytat
po pierwsze primo mussz zamienic
nie dawaj tam srednika na koncu ja juz go uzylem tutaj

Nieuwaga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Wielkie dzięki, teraz to działa jak trzeba (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Spróbuję sobie to teraz urozmaicić jeszcze i jak coś to się zgłoszę ponownie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

edit

Wszystko działa fajnie, jednak co jeśli chciałbym mieć np. zamiast [cokolwiek] zmienną, a zamiast [plik:cokolwiek] include pliku? Taki mini system szablonów. Aktualnie mam tak:
  1. <?
  2. function lol($text)
  3. {
  4. $szukaj = array (
  5. "#\[(.*?)\]#si"
  6. );
  7. $zamien = array (
  8. '\$\\1'
  9. );
  10.  
  11. $wynik = preg_replace($szukaj, $zamien, $text);
  12. $wynik = addslashes($wynik);
  13. $display = "echo \"";
  14. $display .= $wynik;
  15. $display .= "\";";
  16. return $display;
  17. }
  18.  
  19.  
  20. $cokolwiek = 'cokolwiek coś';
  21. $cokolwiek2 = 'coś tam bedzie';
  22. $cokolwiek3 = file_get_contents('text.txt');
  23.  
  24. $string = file_get_contents('plik.html');
  25. $string = eval(replace($string));
  26. echo $string;
  27. ?>

I chciałbym teraz zrobić tak:
  1. <?
  2. $szukaj = array (
  3. "#\[(.*?)\]#si",
  4. "#\[plik(.*?)\]#si"
  5. );
  6. $zamien = array (
  7. '\$\\1',
  8. '\$\\1'
  9. );
  10. ?>

No i właśnie nie wiem jak dodać drugą pozycje w tablicy. Include dać nie mogę, bo wszystko poprzedzane jest echo. Próbowałem usunąć poprzedzające echo i wpisywać je w tablicy, ale mam znowu mój stary parse error. Byłbym wdzięczny za rozwiązanie problemu i najchętniej jeżeli się da to chciałbym, żebym mógł bawić się w tablicy tak:
  1. <?
  2. $szukaj = array (
  3. "#\[(.*?)\]#si",
  4. "#\[plik(.*?)\]#si"
  5. );
  6. $zamien = array (
  7. 'echo \$\\1;',
  8. 'include('\$\\1');'
  9. );
  10. ?>

bo te definiowanie zmiennych to trochę taka sprawa, że wolniej generuje stronę jeżeli tych zmiennych jest dużo. W dodatku include do zmiennej nie da się dodać.
Z góry dzięki!

Ten post edytował LamaMASTER 11.04.2006, 13:47:23
Go to the top of the page
+Quote Post

Posty w temacie
- LamaMASTER   Parsowanie tablicy z preg_replace?   7.04.2006, 21:02:22
- - phobos   Moze takie cos pomorze [PHP] pobierz, plaintext ...   7.04.2006, 21:21:34
- - LamaMASTER   Z tym już kombinowałem, tzn. samo danie \...   7.04.2006, 21:31:18
- - phobos   tak [PHP] pobierz, plaintext <?php funct...   7.04.2006, 22:29:59
- - LamaMASTER   Też próbowałem, ale przypuśćmy, że robię sobie tak...   8.04.2006, 08:33:01
- - Wave   może preg_replace_callback ? albo modyfikator ...   8.04.2006, 11:32:44
- - phobos   ej czyli ty chcesz cos takiego w tablicy chcesz m...   8.04.2006, 12:59:06
- - LamaMASTER   Wave - posprawdzam. Phobos - nie sugeruj się przyk...   9.04.2006, 18:32:05
- - phobos   aha czyli ty chcesz aby byla taka funkcja ktora pr...   9.04.2006, 21:56:42
- - LamaMASTER   Nieeee. Pousuwać nawiasy to ja mogę za pomocą str_...   10.04.2006, 19:49:03
- - phobos   ok man zrobilem cos takiego funckja ktora w teksci...   10.04.2006, 21:52:35
- - LamaMASTER   Wielkie dzięki, to jest już postęp. Zastosowałem t...   11.04.2006, 10:41:09
- - phobos   po pierwsze primo mussz zamienic [PHP] pobierz, p...   11.04.2006, 12:01:49
- - LamaMASTER   Cytatpo pierwsze primo mussz zamienic nie dawaj t...   11.04.2006, 13:02:07
- - phobos   sluchaj ale jest jeden szczegół popatrz dla takieg...   11.04.2006, 15:20:13
- - LamaMASTER   Kurcze Ty to masz łeb Teraz się trochę pogubiłem,...   11.04.2006, 15:56:16
- - phobos   mam takie cos tylko tam se pozniej pozamieniaj na ...   11.04.2006, 16:35:53
- - LamaMASTER   Ale kombinujesz na około, jak było print tak jest ...   11.04.2006, 16:47:16
- - phobos   tzn chodzi o to ze jak masz <div....> to poz...   11.04.2006, 16:57:32
- - LamaMASTER   O to zleksza kiepsko. Czemu jest ten parse error? ...   11.04.2006, 17:03:05
- - phobos   w php nie mozesz uzywac sobie tagów html bo wyskak...   11.04.2006, 17:13:03


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 16:07