Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrażenie regularne
Forum PHP.pl > Forum > Przedszkole
Lirdoner
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 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 wink.gif
erix
A o str_replace czasem słyszałeś? tongue.gif
Lirdoner
Pewno, że słyszałem ale nie użyję w nim wyrażeń regularnych które mi są niezbędne do zastąpienia {if $zmienna == $zmienna2}
Pogrubiona wartość jest zmienna, skrypt nie ma pojęcia co się tam kryje dlatego potrzebuję skorzystać z wyrażeń regularnych

str_replace mogę jednak użyć przy {else} i {/if} ale czy to będzie dobre rozwiązanie skoro mogę wszystko za jednym zamachem przez preg_replace?
buliq
  1. #{if ((.)*?)}((.|\n)*?)(({else})*?)((.|\n)*?){\/if((.)*?)}#iu

?

Zapewne można bardziej optymalnie, ale to tak pisane z palca smile.gif
erix
Cytat
Pogrubiona wartość jest zmienna, skrypt nie ma pojęcia co się tam kryje dlatego potrzebuję skorzystać z wyrażeń regularnych

Ale zważ na to, że sprawdzane wyrażenie jest zgodne ze składnią pehapca, więc nadal wystarczy Ci str_replace.
by_ikar
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 wink.gif
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.