Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyrażenia regularne, wyszukanie zmiennej w ciągu
tsharek
post 11.12.2004, 13:55:24
Post #1





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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


--------------------
Go to the top of the page
+Quote Post
bendi
post 14.12.2004, 12:27:24
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Kod
^\$[^_].*


--------------------
Go to the top of the page
+Quote Post
tsharek
post 14.12.2004, 13:17:50
Post #3





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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'


--------------------
Go to the top of the page
+Quote Post
bendi
post 14.12.2004, 15:26:52
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


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


--------------------
Go to the top of the page
+Quote Post
tsharek
post 14.12.2004, 19:27:35
Post #5





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


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. ?>


Ten post edytował tsharek 14.12.2004, 22:11:34


--------------------
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: 8.07.2025 - 03:13