RegExp "verschluckt" sich

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
B

ByeBye 8492

Servas,
habe folgendes Problem:
Immer wenn ich zum Beispiel schreibe:

TeST

bleibt der gesamte Text orange.
Das rote wirrd einfach ignoriert.
PHP:
		  $text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/siU",'<font color="\\1">\\2', $text);

So sieht das Ding aus :).
Kann man das irgendwie machen das er alle colors ersetzt oder muss ich das dann mit preg_match_all etc. machen?

Weil das wäre dann ja ziemlich umständlich.
 
Schmeiss mal das Fragezeichen bei
Code:
](.*?)\]
raus, damit der die komplette Klammer futtert. Sonst marschiert der halt nur bis zum ersten [ /color ] .. probier's mal.
 
Nils Hitze hat gesagt.:
Schmeiss mal das Fragezeichen bei ](.*?)\] raus, damit der die komplette Klammer futtert. Sonst marschiert der halt nur bis zum ersten .. probier's mal.
Keine Besserung :(
 
Hier mal eine Lösung, die vielleicht nicht optimal ist, aber funktioniert:
PHP:
<pre>
<?
    function preg_color($text,$indent) {
        $res = array();
        preg_match("/\[ color=(.*?) \](.*?)\[\ /color \]/i",
            $text,
            $res,
            PREG_OFFSET_CAPTURE,
            $indent);
        /*Debugausgabe START*/
        print_r($res);
        /*Debugausgabe END*/
        if (count($res)>1) {
            $text=preg_color($text,$res[2][1]);
            preg_match("/\[ color=(.*?) \](.*?)\[\ /color \]/i",
                $text,
                $res,
                PREG_OFFSET_CAPTURE,
                $indent);

            /* Im folgenden Aufruf muss die Formatierung
             * angepasst werden.
             * $res[1][0] enthält die Farbe.
             * $res[2][0] enthält den Text, der zwischen
             *            den Color-Tags steht.
             * &lt;, &gt; und die Verwendung der Farbe als
             * Anfangs- und End-Tag dienen nur der Illustration,
             * dass die zueinander gehörenden Anfangs- und
             * End-Tags auch zueinander passend gefunden werden.
             */
            $text=substr($text,0,$res[0][1])
                ."&lt;"
                .$res[1][0]
                ."&gt;"
                .$res[2][0]
                ."&lt;/"
                .$res[1][0]
                ."&gt;"
                .substr($text,$res[0][1]+strlen($res[0][0]));
        }

        /*Debugausgabe START*/
        echo($text."\n\n");
        /*Debugausgabe END*/

        return $text;
    }
    
    /* "Versuchsaufbau" */
    
    $text="[ color=orange ]Te[ color=red ]ST[ /COLOR ][ /COLOR ]";

    $text=preg_color($text,0);

    /* Ergebnis ausgeben */
    echo($text);
?>
</pre>

Gruß hpvw
 
Zurück