Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyr. regularne i bardziej skomplikowany ciąg
Forum PHP.pl > Forum > PHP
czachor
Wtam! Mam taki kod:
  1. <?php
  2. class change
  3. {
  4. var $string;
  5. var $result;
  6. var $vars;
  7.  
  8. function change($string)
  9. {
  10. $this -> string = $string;
  11. $this -> result = NULL;
  12. $this -> vars = array();
  13. }
  14.  
  15.  
  16. function replace()
  17. {
  18. $this -> result = preg_replace(&#092;"/{(S+)}/e\", \"$this-> 1\", $this -> string);
  19. echo $this -> result;
  20. }
  21.  
  22.  
  23. function insert_var($name, $value)
  24. {
  25. $this -> {$name} = $value;
  26. }
  27. };
  28.  
  29. //Przykład użycia
  30. $string = 'Cześć {name} co porabiasz w {day}';
  31.  
  32. $change = new change($string);
  33. $change -> insert_var('name', 'Waluś'); //wstawienie wartości zmiennych
  34. $change -> insert_var('day', 'środę');
  35. $change -> replace();
  36. //Zwróci oczywiście
  37. //Cześć Waluś co porabiasz w środę
  38. ?>

Niestety przy ciągach typu
Kod
Cześć} } {name4} bl{name} a{ df {name22} {{{sdf} {blah}
całość się wywala... W wyrażeniach regularnych jestem jeszcze słaby, dlatego proszę o Waszą pomoc, w jaki sposób przetworzyć podany string... ohmy.gif
Z góry dzięki!
crash
Użyj wyrażenia: /\{([a-zA-Z0-9]+)\}/e
czachor
Dzięki! Działa.

-UPDATE
Hmm... nie do końca sad.gif
Bo jeżeli będzie np. tak:
  1. <?php
  2. $string = 'Cześć} } {name4} bl{name} a{ df {name22} {{{sdf} {blah}';
  3.  
  4. $change = new change($string);
  5. $change -> insert_var('NAME', 'jakies imie');
  6. $change -> insert_var('NAME22', 'inne imie');
  7. $change -> replace();
  8. ?>

czyli u góry zmienne pisane małymi, u dołu dużymi literami, to zasadniczo nic nie powinno się stać (czyli zwrócić ciąg bez zmian), tymczasem dostaję
Kod
Cześć} } bl a{ df {{


Tak samo nie wiem jak zrobić, żeby niezdefiniowanych zmiennych (np. w tym przykładzie {name4}) nie ruszało...
hwao
zaden system szablonow nie obbsluguje pustych } {} {}{} {}{{ }} i tak dalej poprostu ich sie zwobodnie nie daje chyba ze w {literal} albo zajstepuje np {prawy} i on wtedy jest podnieniany w paserze na }
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.