Felix Riesterer: preg_replace: Ausdruck passt nicht :-(

Beitrag lesen

Liebe RegExperten,

ich habe eine verschachtelte Liste (<ul>), bei der ich das höchste Element in der Element-Hierarchie entfernen möchte. Damit das Ganze nicht zu einfach wird, steckt diese Liste auch noch in einem <div>-Elternelement.

Beispiel-Code:

<div>  
<ul class="egal">  
    <li class="auch egal">Unterliste  
    <ul>  
        <li class="ebenso egal">Unter-Unterliste  
        <ul>  
            <li class="auch egal">noch mehr Kram...</li>  
            <li class="wurschd">und noch mehr...</li>  
        </ul>  
        </li>  
    </ul>  
    </li>  
</ul>  
</div>

So. Nun ist es mir bereits gelungen, das erste öffnende <ul> und das direkt darauffolgende öffnende <li> zu entfernen. Aber am Ende stehen ja nun zwei verwaiste schließende Tags, die auch noch entfernt werden müssen. Hier versagt leider mein Code, denn plötzlich ist alles an Listen-speziefischem HTML-Code weg, bis auf das umgebende <div>...

Hier mein Code:

$liste = preg_replace('~(?is)<ul class=.*?([\t ]*<ul.*)$~', '\\1', $liste);  
// erfolgreich: erstes <ul> und <li> ist weg  
$liste = preg_replace('~(?is)</li>.*?</ul>.*?(</div.*)$~', '\\1', $liste);  
// gelingt nicht: alles von der Liste ist jetzt weg (???)

Mein Error-Log schweigt und ich muss mich wundern, warum so radikal alles entfernt wird. Wer kann mir raten?

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)