[PHP] <.*> in einem Teilstring rausfiltern



  • Hallo,
    ich habe ein String, der ungefähr so aussieht "...<span keyword=\"text\">"...<span...></span>...<span...></span>.."</span>...". Nun möchte ich die ganzen <span> Tags innerhalb des <span keyword="text"></span> Tags entfernen.

    Ich dachte, dass ich das irgend wie so hinbekommen kann

    $code=preg_replace
           ('/<span class="text">&quot;(.*)<.*>(.*)&quot;<\\/span>/U',
    	'<span class="text">&quot;\\0\\1&quot;</span>',
    	$code);
    

    aber das geht natürlicht nicht. 😞

    Hat jemand von euch eine Idee?



  • Ich denke, du musst erst den inneren String (innerhalb des gewollten span) extrahieren und dann mit einem "nicht-gierigen" replace alles mit <*> durch nichts ersetzen - k.A., ob du damit jetzt etwas anfangen kannst 🤡

    Aber bzgl. regulären Ausdrücken gibt es hier auch noch deutlich kompetentere Leute im Forum - evtl. kann dir da ja noch jemand einen fertigen Ausdruck servieren 😋



  • Wenn in den ganzen inneren <span>s kein &quot vorkommt, dann könntest du dieses Token ja als End-Delimiter benutzen. Statt dem gierigen .* liest du praktisch so lange ein, bis du auf das Token ""</span>" stößt.



  • So gehts:

    $new=preg_replace('#<span class="text">(.*)</span>#e','\'<span class="text">\'.striptags(\'$1\').\'</span>\'',$old);
    

    Gruß Jens



  • thx
    mit ein paar Anpassungen geht es

    $new=preg_replace('#<span class="text">&quot;(.*)&quot;</span>#Ue',
    '\'<span class="text">&quot;\'.strip_tags(\'$1\').\'&quot;</span>\'',$old);
    

Anmelden zum Antworten