Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenie regularne, optymalizacja
Lirdoner
post
Post #1





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

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


Witam, mam wyrażenie regularne które zamieni mi taki ciąg
Kod
{if $zmienna == $zmienna2}
aaaaaa
{else}
bbbbb
{/if}

Oczywiście warunek ($zmienna == $zmienna2) jest zmienny
Aktualnie robię to tak
  1. $file = preg_replace("#{if (.*)}#", "<?php if($1) { ?>", $file);
  2. $file = preg_replace("#{else}#", "<?php } else { ?>", $file);
  3. $file = preg_replace("#{/if}#", "<?php } ?>", $file);

No i wszystko działo ale jestem pewny, że można to zrobić w jednej linijce i nie wykorzystywać 3 funkcji preg_replace
Próbowałem na różne sposoby ale nie wyszło (IMG:style_emoticons/default/biggrin.gif)
Problem jeszcze jest taki, że chciałbym aby obsługiwało to też taki ciąg
Kod
{if $zmienna == $zmienna2}aaaaaa{else}bbbbb{/if}

Bo przy powyższym sposobie są błędy (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


A nie lepiej użyć alternatywnej składni php?

  1. {if($warunek):}
  2. // something
  3. {else:}
  4. // something else
  5. {endif;}


Jedynie zamieniając klamry na tagi php ?

O alternatywnej składni bloków kodu (pętli, warunków) poczytać możesz w dokumentacji: Alternative syntax for control structures

EDIT: tak teraz zajrzałem dokładnie do pierwszego posta, tj do listingu kodu jaki podałeś i powiem ci tak, zajrzyj do dokumentacji preg_replace, możesz zamiast jednego wyrażenia podać ich kilka, w tablicy. Jak podajesz w tablicy wzorce, to w drugim argumencie musisz podać tablicę zastępowanego ciągu:

  1. <?php
  2.  
  3. $pattern = array('#{if (.*)}#is', '"#{else}#"is', '#{/if}#is');
  4. $replacement = array('<?php if($1) { ?>', '<?php } else { ?>', '<?php } ?>');
  5.  
  6. $file = preg_replace($pattern, $replacement, $file);


Tyle że w taki sposób tobie to będziesz musiał zrobić zyliard wyrażeń regularnych i pamiętać cały czas składnie takiego szablonu. W przypadku zapisu alternatywnego, nie tworzysz niczego nowego, bo to już jest od dość dawna w dokumentacji. Tutaj już masz w sumie gotowe rozwiązanie: http://forum.php.pl/index.php?showtopic=18...t-member-921998 które właśnie oparłem o alternatywny zapis struktur kontrolnych (warunki, pętle etc). Może ci to w czymś pomoże (IMG:style_emoticons/default/wink.gif)

Ten post edytował by_ikar 30.12.2011, 18:25:56
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 04:56