Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
bolon
Witam,

Potrzebuje pomocy przy ułożeniu wyrażenia regulanego, którego zadaniem bedzie:

np. z Ciągu
0{test}1{test}2{/test}3{test}4{/test}5{/test}6{test}7{/test}8

Wyciągnąć 1{test}2{/test}3{test}4{/test}5 i 7

czyli to co pomiędzy znacznikami test, w wypadku kiedy miedzy znacznikami nie występuja inne takie same znaczniki lub jęsli ostatni taki sam znacznik nie jest znacznikiem otwierającym dla jak najdłuższego dopasowania.

To co sam próbuje ułożyc jest raczej żałosne #\{(.*?)\}([^(\{/\1\}).*?(\{\/\1\})])\{\/\1\}#si

Z góry dzieki za pomoc!
bostaf
Wyrażenia regularne służą do parsowania regularnych wzorców. Wzorce zagnieżdżone (np. takie z Twojego przykładu) nie są regularne, bo ilość zagnieżdżeń nie jest określona. Chyba każdy początkujący programista PHP staje w pewnym momencie przed "koniecznością" potraktowania kodu (X)HTML wyrażeniami regularnymi. Walczy przez jakiś czas i dowiaduje się, ze (X)HTMLa nie da się parsować wyrażeniami regularnymi. Twój problem, mimo że nie dotyczy HTMLa, jest taki sam.
Potrzebowałbyś innego parsera. Mógłbyś poczytać o analizatorach składni i być może znaleźć w ten sposób jakieś gotowe rozwiązanie dla swoich potrzeb.
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.