preg_match pobieranie zawartości bloków

0

Witam,
nie mogę sobie poradzić z jedną kwestią. Chcę pobrać zawartość pomiędzy konkretnymi blokami, ale te bloki nie mają stałej "nazwy" - przykład:

{IF_nazwa}
Tutaj jest zawartość bloku
{/IF_nazwa}

I problem tkwi w tym, że nazwa nie jest mi znana, więc chcę napisać takie wyrażenie regularne:
/\{IF_(\w+)\}(\w+)\{/IF_(\w+)\}/

I teraz mam 2 możliwości:

  1. Analiza czy pierwsza ${1} i trzecia ${3} zmienna są identyczne - ale tak nie chcę robić
  2. Coś na zasadzie: /{IF_(\w+)}(\w+){/IF_${1}}/

I jeszcze jak najlepiej pobierać treść między blokami?
Jako, że ta treść to może być każdy możliwy znak (spacje, tabulatory, next line itd) to myślałem o czymś na zasadzie:
([\V\n\t\r]+)
ponieważ:
V - any character that is not a vertical whitespace character
n - next line
t - tab
r - return carrige

Choć właśnie wpadłem na to, że najłatwiej będzie robić ([\V\n]+), ponieważ t i r powiela się z next line.

0

i jeszcze pewnie ma się nie posypać na zagnieżdżonych? regexpy się tu nie spiszą.

sprawdź bibliotekę smarty - ona właśnie takie tagi ma, zobacz sobie jak się do dopasowuje

0

Dokładnie tak, są zagnieżdżenia. Masz rację przejrzę smarty i open template (o takich jeszcze słyszałem).

A co do drugiego pytania - czy wyrażenie regularne \V\n będzie mi pobierać każdą zawartość tagów, bez względu na to co się między nimi znajduje?

0

Nie stosuj wyrażeń regularnych do tego. Po prostu.

0

Ale omijając to. Załóżmy, że mam dwa konkretne i znane mi bloki, to czy jest to dobra metoda pobierania zawartości między nimi? Chodzi o samą formę wyrażenia regularnego.

0

Właśnie wpadłem jak to rozwiązać... zamykam temat

1 użytkowników online, w tym zalogowanych: 0, gości: 1