Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [pcre] preg_replace() - czesc pattern'u w tablicy.
starach
post 11.04.2007, 11:25:27
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Witam.
Nie dawno pisałem na forum o błędzie pakietu smarty.
Postanowiłem zrobić swój własny system szablonów.
Chcę wyeliminować problem który pojawiał się w smaratach ( przynajmniej na etapie produkcyjnym )
i wykasować z szablonu wzorów których nie ma w tablicy z przypisanymi danymi.
O co chodzi ?
O to że chcę wywalić wybrane tagi {$wybrany_tag}
mam nazwy tych tagów w tablicy i chcę za pomocą preg_replace() usunąć je z szablonu wczytanego do zmiennej.
  1. <?php
  2. preg_match_all('/{$([^}]+)}/e', $this->tmpl, $array);
  3. ?>
Powyższym zapytaniem pobieram wszystkie tagi szablonowe do zmiennej $array,
potem za pomocą isset() sprawdzam czy w tablicy istnieje rekord o danym indeksie
  1. <?php
  2. if(isset($this->data[$array[1][$i]]))
  3. {
  4. echo 'Zmienna istnieje: '.$array[1][$i].'<br>';
  5. } else {
  6. echo 'Zmienna <u>nie</u> istnieje: '.$array[1][$i].'<br>';
  7. array_push($expel_arr, $array[1][$i]);
  8. }
  9. ?>
Jeśli nie istnieje wrzucam nazwy tagów do tablicy $expel_arr,
Teraz chcę za pomocą wpisów w expel_arr usunąć z szablonu tagi które nie mają przypisanej zmiennej i próba ich zamiany zakończyła by się błędem. Niestety w wyrażeniach regularnych jest bardzoo cienki.
Prosiłbym o ułożenie odpowiedniego $patternu który usuwałby z szablonu odpowiednie tagi, bo poniższy niestety mi nie działa.
  1. <?php
  2. preg_replace("/{$($expel_arr)}/e", '', $this->tmpl);
  3. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
bendi
post 11.04.2007, 12:01:03
Post #2





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

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


Moze tak:
  1. <?php
  2. preg_replace("/{(".join('|',$expel_arr)."}/", '', $this->tmpl);
  3. ?>


--------------------
Go to the top of the page
+Quote Post
starach
post 11.04.2007, 12:22:08
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


preg_replace("/\{(".join('|',$expel_arr)."\}/", '', $this->tmpl);
Exception 2: E_WARNING
File: D:\WWW\includes\class\class_template.php Line: 41
Error: preg_replace() [function.preg-replace]: Compilation failed: missing ) at offset 18
Coś nie tak :|

Ten post edytował orglee 11.04.2007, 12:22:25
Go to the top of the page
+Quote Post
Sedziwoj
post 11.04.2007, 13:43:27
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


A co jak wywalany tak jest wewnątrz {* *} ?


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Kicok
post 11.04.2007, 15:42:43
Post #5





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2. $this->tmpl = preg_replace('/{$(' . join('|', $expel_arr) . ')}/', '', $this->tmpl);
  3. ?>


Zakładając, że $expel_arr to tablica tagów do usunięcia


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
starach
post 11.04.2007, 15:57:42
Post #6





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


  1. <?php
  2. $pattern = "/{$(".join('|',$expel_arr).")}/";
  3. echo '<b>'.$pattern.'</b><br>';
  4. $this->tmpl = preg_replace($pattern, '', $this->tmpl);
  5. ?>

Działa.
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: 14.08.2025 - 01:19