Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrażenia regularne
Forum PHP.pl > Forum > PHP
tsharek
Witam serdecznie forumowiczów.

Ostatnio wziołem się za pisanie prostego systemu szablonów. Znaczy taki prosty to on nie będzie bo chce tam zawrzeć pętle i warunki. no ale do sedna. Jakim wyrażeniem regularnym mogę wydostać ze stringa zmienną. zmienna jest zapisana jak w php za pomocą $. wyjątkiem ma być ciąg rozpoczynający się od $_
przykład:

ala ma $zwierze1 oraz $zwierze2 oraz nie ma $_POST['zwierze3']
ma zamienić na:
ala ma $this->data['zwierze1'] oraz $this->data['zwierze2'] oraz nie ma $_POST['zwierze3']

chcę te wyrażenie później wsadzić w preg_replace

z góry dziękuję za odpowiedźsmile.gif
bendi
Kod
^\$[^_].*
tsharek
Cytat
Warning: Unknown modifier '_' in **** on line 3


sad.gif

test:
  1. <?php
  2. $str='test $test1 $_test2';
  3. echo preg_replace(&#092;"^$[^_].*\", 'ttttttttttttt', $str);
  4. ?>



powinno wyjść coś takiego: 'test tttttttttttt $_test2'
bendi
  1. <?php
  2. $str='test $test1 $_test2';
  3. echo preg_replace(&#092;"%^$[^_].*%\", 'ttttttttttttt', $str);
  4. ?>
tsharek
Witam, poradziłem sobie z problemem już smile.gif
Jakby ktoś chciał skożystać z mojej mini klasy do szablonów to zapraszam. Klasa na miała tylko na celu być szybka, bez zbędnych wodotrysków, oraz obsługiwać instrukcje if i foreach oraz rozpoznawać i zostawiać w spokoju zmienne globalne $_***. Klasa ta nie ma obsługi błędów typu: nie wyświetli się żaden komunikat jeśli nie został zamknięty foreach albo nie została zadeklarowana jakaś zmienna (to akurat notice), ale to dla mnie akurat lepiej było bo sam z góry mogę tym kontrolować. jakby ktoś chciał ją użyć i miał jakieś uwagi to proszę w tym wątku odpowiadać (wiem wiem- temat nie na to forum, ale jak już tutaj zaczołem to po co zaśmiecać:P)
ps. sorka za nei trzymanie się żadnych standardów kodowania, ale pisze jak lubie:)
ps2. nei ma żadnej instrukcji obsługi bo klasa jest banlna i każdy się domyśli (chyba:P)
ps3. jak używasz tego skryptu to możesz dać o tym znać (wtedy się podbudowywuje:P)
  1. <?php
  2. function Template_callback($match)
  3. {
  4. if(substr($match['1'],0, 2)==='if') return '<?php if('.(preg_replace(&#092;"/$([^_][w]*)/\", '$this->add['1']',substr($match['1'],3))).'): ?>';
  5. else if(substr($match['1'],0, 3)==='/if') return '<?php endif; ?>';
  6. else if(substr($match['1'],0, 7)==='foreach') return '<?php foreach('.(preg_replace(\"/$([^_][w]*)/\", '$this->add['1']',substr($match['1'],8))).'): ?>';
  7. else if(substr($match['1'],0, 8)==='/foreach') return '<?php endforeach; ?>';
  8. else return '<?php echo '.(preg_replace(\"/$([^_][w]*)/\", '$this->add['1']', $match['1'])).'; ?>';
  9. }
  10. class Template
  11. {
  12. var $add=Array();
  13. var $dir='templates/';
  14. var $dir_c='templates_c/';
  15. var $force=false;
  16. function _make_file($fileName)
  17. {
  18. $tplString = implode(file(($this->dir).$fileName));
  19. if (!$handle = fopen($this->dir_c.$fileName.'.php', 'w')) exit('Cannot open file '.$fileName);
  20. if (!fwrite($handle, preg_replace_callback(\"/{(.*?)}/\", 'Template_callback', $tplString))) exit('Cannot write to file '.$fileName);
  21. fclose($handle);
  22. }
  23. function display($fileName)
  24. {
  25. if(!is_file($this->dir_c.$fileName.'.php') || $this->force ) $this->_make_file($fileName);
  26. include($this->dir_c.$fileName.'.php');
  27. }
  28. function fetch($fileName)
  29. {
  30. if(!is_file($this->dir_c.$fileName.'.php') || $this->force ) $this->_make_file($fileName);
  31. ob_start();
  32. include($this->dir_c.$fileName.'.php');
  33. $tplReturn = ob_get_contents();
  34. ob_end_clean();
  35. return $tplReturn;
  36. }
  37. }
  38. ?>
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.