PHP RegEx Problem

  • Hallo,
    wie schon hier: https://www.forum-hilfe.de/showthread.php?p=366212 angesprochen, bastele ich mir gerade einen eigenen Parser.

    Ich möchte nun HTML-Tags die ein Style-Attribut enthalten abfangen um die Style-Angaben wiederum zu filtern.
    Dazu habe ich folgenden Code:

    PHP
    $string = preg_replace_callback("/<(.*?)style\s*=\s*[\'|'](.*?)[\'|'](.*?)>(.*?)<\/.*?>/i", style_replace, $string);

    Gebe ich nun folgenden Code ein funktioniert das ganze wunderbar:

    HTML
    <p style="text-align: left;">beliebiger Text hier drin</p>

    Als Ergebnis bekomme ich (durch print_r):

    PHP
    Array
    (
        [0] => <p style="text-align: left;">beliebiger Text</p>
        [1] => p 
        [2] => text-align: left;
        [3] => 
        [4] => beliebiger Text
    )

    Wird allerdings folgender Code eingegeben gefällt mir das Ergebnis nicht mehr ganz:

    HTML
    <p style="text-align: left;"><span style="color:  #ff0000;">beliebiger Text</span></p>

    Als Ergebnis kommt:

    PHP
    Array
    (
        [0] => <p style="text-align: right;"><span style="color: #ff0000;">beliebiger Text</span>
        [1] => p 
        [2] => text-align: right;
        [3] => 
        [4] => <span style="color: #ff0000;">beliebiger Text
    )

    Das Problem liegt darin, dass er als Anfangs-Tag das "p" nimmt, als End-Tag jedoch das "span". Ich möchte nun irgendwie sicherstellen, dass Anfangs- und End-Tag genau gleich sind. Ich konnte allerdings leider nichts finden womit das funktionieren kann. Habt ihr da eine Idee ?