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
phobos
post
Post #2





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


mam takie cos tylko tam se pozniej pozamieniaj na ten plik ktory ty chcesz wczytac
  1. <?
  2. function replace($text)
  3. {
  4. $szukaj = array (
  5. "#\[plik:(.*?)\]#si",
  6. "#\[(.*?)\]#si"
  7. );
  8. $zamien = array (
  9.  "\");include(\$\\1);print (\"",
  10.  '\$\\1'  
  11. );
  12.  
  13. foreach($szukaj as $index => $value)
  14.  if(preg_match($value,$text)==1) break; 
  15.  $wynik = addslashes($wynik);
  16. $wynik = preg_replace($szukaj[$index], $zamien[$index], $text);
  17.  
  18.  
  19.  $display= "print (\"";
  20.  $display .= $wynik;
  21.  $display .="\");";
  22. return $display;
  23. }
  24.  
  25. $string="<div align='center'>[cokolwiek]</div>";
  26. $cokolwiek = 'cos.txt';
  27.  
  28. $string = eval(replace($string));
  29. echo $string;
  30. ?>

i teraz jak bedzie [cokolwiek] to wypisze zmienna $cokolwiek a jak bedzie [plik:cokolwiek] to zaincluduje plik ktory jest podany w zmiennej $cokolwiek

Ten post edytował phobos 11.04.2006, 16:36:55
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: 5.10.2025 - 01:34