php preg_match non greedy

heyho

ich bastel grad nen einfaches template system für meine zwecke.
dabei brauch ich sachen die wiederhotl darstellt werden können.
beispiel ein menu:

PHP:
                <div id="menu">
                    <ul>
                        {repeater='menu'}
                        <li>
                            <a href="{href}">{name}</a>
                        </li>
                        {repeater}
                    </ul>
                </div>

solange nur ein "repeater" von mir definiert ist klappt das super.
sobald ich aber noch das submenu einfüge

PHP:
                <div id="menu">
                    <ul>
                        {repeater='menu'}
                        <li>
                            <a href="{href}">{name}</a>
                        </li>
                        {repeater}
                    </ul>
                </div>
                <div id="submenu">
                    <ul>
                        {repeater='submenu'}<li><a href="{href}">{name}</a></li>{repeater}
                    </ul>

wird alles erfasst von preg_match, was zwischen den äußersten repeater paaren ist.

der preg match sieht dabei recht simpel aus:

PHP:
preg_match("~\{repeater='$name'\}(.*)?\{repeater\}~s",$this->html,$snipped);

nur kann ich nicht verhindern, dass der zu viel aufnimmt, normal sollte doch das "?" verhindern, dass der match zu gierig ist. wieso klappt das nicht?
 
Zuletzt bearbeitet:
ah okay, danke für deine hilfe.
ich dachte das ist okay, ich dachte ich mach damit den ausdruck in der klammer ungreedy, und nicht optional!

wieder was gelernt, ich hatte das problem im übrigen mit dem modifier "U" umgehen können, der alle ausdrücke ungreedy macht :)
 
Zurück
Oben