problem mit preg_replace

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

  • problem mit preg_replace

    hallo,
    hab mir ein script geschrieben, was bestimmte suchmuster in einem string umwandeln soll. als bsp: [ url ]www.test.de[ /url ] (ohne leerzeichen)in einen richtigen html link umwandeln. geht auch sehr gut.
    das problem ist ejtzt aber, dass es nicht mehr korrekt angezeigt wird, sobald er mehrere suchmuster in einem string findet.
    hier erstmal der code:

    PHP-Code:
    <?
    // $cont = eingangsstring
    $text=0;

    $suche =     array('!\[url\](.*?)\[/url\]!i',
                  '!\[url=(.*?)\](.*?)\[/url\]!i',
                  '!\[b \](.*?)\[/b\]!i',
                  '!\[em \](.*?)\[/em\]!i', //ohne leerzeichen
                  '!\[u \](.*?)\[/u\]!i',
                  '!\[strike \](.*?)\[/strike\]!i',
                  '!\[email \](.*?)\[/email\]!i',
                  '!\[email = (.*?)\](.*?)\[/email\]!i');
            
    for($s=0; ;$s++)    { // finde arrayende von $suche
         if(!$suche[$s])    {
        break;
         }
    }

    for($i=0;$i<=$s;$i++)    { // so lange, wie $i nicht größer als das arrayende von $suche

    $match = @preg_match($suche[$i],$cont,$matches);
         if($match)      {
        $ersetze = array('<b><a class="red" href="'.$matches[1].'" target="_blank">'.$matches[1].'</a></b>',
                        '<b><a class="red" href="'.$matches[2].'" target="_blank">'.$matches[1].'</a></b>',
                        '<b>'.$matches[1].'</b>',
                        '<em>'.$matches[1].'</em>',
                        '<u>'.$matches[1].'</u>',
                        '<strike>'.$matches[1].'</strike>',
                        '<b><a class="red" href="mailto:'.$matches[1].'">'.$matches[1].'</a></b>',
                        '<b><a class="red" href="mailto:'.$matches[2].'">'.$matches[1].'</a></b>');
                  
    $text = @preg_replace($suche,$ersetze,$cont);
        }
    }
    if(!$text)    {
           $text = $cont;
    }
    // $text = ausgabestring
    ?>
    so angenommen in $cont würde "[ b ]fett[ /b ][ em ]kursiv[/ em ]" (ohne leerzeichen) stehen, gibt er mir folgendes aus:
    Code:
    [b]fett[/b][I]fett[/I]
    er nimmt sich also den eil zwischen den tags des ersten ergebnisses.
    ich such jetzt schon den halben tag nach dem fehler, komme aber keinen meter weiter weil mir mein script total logisch erscheint und ich mir net vorstellen kann, wo der fehler liegt.

    gruß
    wolle
    Zuletzt geändert von wolle85; 12.12.2005, 23:53.

  • #2
    ok ich bin bei der fehlersuche einen schritt weitergekommen.
    das problem ist, dass preg_match() nur suchmuster im stringformat akzeptiert und preg_replace() mixed.
    deswegen ist es in meiner script auch total idiotisch, preg_replace() durch eine schleife laufen zu lassen.
    muss meine frage umformulieren:
    ich will jetzt im ersetze array einfach per reguläre ausdrücke dem programm sagen, dass da wo jetzt $matches[] steht der inhalt von (.*?) aus $suche hin soll.
    weiß jetzt nicht inwiefern das zu realisieren ist.
    meine kenntnisse in regulären ausdrücken sind auch nur sehr beschränkt, deswegen wäre hier professionelle hilfe sehr gut

    gruß
    wolle

    Kommentar


    • #3
      *push*

      sorry aber muss das heut noch lösen.
      weiß jetzt nicht, ob man das über reguläre ausdrücke überhaupt in prag_replace lösen kann. wenn nicht, wäre ich für andere vorschläge natürlich auch sehr dankbar.

      gruß
      wolle

      Kommentar


      • #4
        ich weiß gar nicht was dein FOR und IF alles soll...mach ein
        preg_replace
        mit Array als Pattern und Replace und lass das drüber laufen, wie (fast) jeder andere auch...ist die einfachste Möglichkeit

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar

        Lädt...
        X