Regexe "verschluckt" Zahlen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regexe "verschluckt" Zahlen

    PHP-Code:
    <?
    $part = "            ...
                <test:tpl name=\"navi_repeat\" key=\"1\">"
    ."            {kategorie}<br /></test:tpl name=\"navi_repeat\">
                ...";
    echo "Original:\n".$part."\n------\n";
    $array = Array("1<br />","2<br />","3<br />");
    if(preg_match("/(\s*)<(test:tpl name=\"navi_repeat\") key=\"1\">(.*?)<\/\\2>/is",$part))
    {
        echo "Value:\n".implode(null,$array)."\n\n------\n";
        
        $preg1 = "/(\s)<(test:tpl name=\"navi_repeat\") key=\"1\">(.*?)<\/\\2>/is";
        $part2 = preg_replace($preg1,implode("$1",$array),$part);
        
        echo "Ergebnis1:\n".$part2."\n\n------\n\n";
        
        $preg2 = "/\n?(\s*)<(test:tpl name=\"navi_repeat\") key=\"1\">(.*?)<\/\\2>/is";
        preg_match($preg2,$part,$whitespaces);
        
        $whitespaces = "\n".$whitespaces[1];
        echo "Whitespaces:\n".$whitespaces."\n\n------\n\n";
        $value = implode($whitespaces,$array);
        
        $preg3 = "/<(test:tpl name=\"navi_repeat\") key=\"1\">(.*?)<\/\\1>/is";
        $part3 = preg_replace($preg3,$value,$part);
        
        echo "Ergebnis2:\n".$part3;
    }

    ?>
    fürht zu diesem Ergebnis (man achte auf Ergebnis 1! "2" und "3" sind einfach "weg". Und im Ergebnis2 geht das ganze zwar, aber es ist ein wenig umständlich. Kann ich beim implode als glue nicht einen Verweis auf etwas von der Regexe angeben?

    Ergebnis:
    Code:
    Original:
    			...
    			<test:tpl name="navi_repeat" key="1">
    {kategorie}<br /></test:tpl name="navi_repeat">
    			...
    (hab ich wegen dem forum vor der {kategorie} umgebrochen
    ------
    Value:
    1<br />2<br />3<br />
    
    ------
    Ergebnis1:
    			...
    		1<br /><br /><br />
    			...
    
    ------
    
    Whitespaces:
    
    			
    
    ------
    
    Ergebnis2:
    			...
    			1<br />
    			2<br />
    			3<br />
    			...
    PS: Oben, im PHP-Code ist alles escaped.
    Zuletzt geändert von Milian; 09.04.2005, 15:00.

  • #2
    Lösung (aus nem anderen Forum):

    beim implode darf man nicht mit
    PHP-Code:
    implode("$1",...); 
    die Backreference angeben, man muss anstelle nehmen:
    PHP-Code:
    implode('${1}',...); 

    Kommentar


    • #3
      OffTopic:
      @Milian: ersetz doch bitte, in deiner Sig, den FF-Link mit "http://www.mozilla.org/products/firefox/" ...
      [COLOR=royalblue]Ein großes DANKE an alle, die sich auf selbstlose Weise im Forum einbringen.[/COLOR]

      [COLOR=silver]btw: REAL PROGRAMMERs aren't afraid to use GOTOs![/COLOR]

      [color=indigo]Etwas ernster, aber auch nicht weiter tragisch, sieht die Situation bei Software-Patenten aus. Software-Patente sind eine amerikanische Erfindung und stehen auf dem selben Blatt wie genveränderte Babynahrung, die im Supermarkt nicht mehr als solche gekennzeichnet werden soll, um die Hersteller nicht gegenüber denen natürlicher Produkte zu diskriminieren ...[/color]
      (from here)

      Kommentar

      Lädt...
      X