Reg-ex probleme im bezug auf code-highlighting

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

  • Reg-ex probleme im bezug auf code-highlighting

    Hi Leutz,
    erst mal mein Code:

    PHP-Code:
    function db2text2html($text) {
                
        
    $text $this->db2text($text);
        
    $text $this->text2html($text);

        return 
    $text;
    }

    function 
    db2text($text) {
                
        
    $text stripslashes($text);
                
        return 
    $text;
    }


    function 
    text2html($string)
        {

            
    $img_start "<img src=\"design/".$GLOBALS["config"]["xinux"]["default_design"]."/images/";
            
    $img_end   "\" border=\"0\">";
                    
            
    $string str_replace("&""&amp;"$string);
            
    $string str_replace("\"""&quot;"$string);
            
    $string str_replace("<""&lt;"$string);
            
    $string str_replace(">""&gt;"$string);
            
    $string eregi_replace("([ \n])[url]http://[/url]([^ ,\n]*)""\\1[url]http://\\2[/url]"$string);
            
    $string eregi_replace("([ \n])[url]ftp://[/url]([^ ,\n]*)""\\1[url]ftp://\\2[/url]"$string);
            
    $string eregi_replace("([ \n])www\\.([^ ,\n]*)""\\1[url]http://www.\\2[/url]"$string);
            
    $string eregi_replace("^[url]http://[/url]([^ ,\n]*)""[url]http://\\1[/url]"$string);
            
    $string eregi_replace("^[url]ftp://[/url]([^ ,\n]*)""[url]ftp://\\1[/url]"$string);
            
    $string eregi_replace("^www\\.([^ ,\n]*)""[url]http://www.\\1[/url]"$string);
             
    $string eregi_replace('\[url\]www.([^\[]*)\[/url\]''<a href="http://www.\1" target="_blank">\1</a>'$string);
            
    $string eregi_replace('\[url\]([^\[]*)\[/url\]''<a href="\1" target="_blank">\1</a>'$string);
            
    $string eregi_replace('\[mailurl\]([^\[]*)\[/mailurl\]''<a href="\1">Link</a>'$string);
            
    $string eregi_replace('\[url=www.([^\[]*)\]([^\[]*)\[/url\]''<a href="http://www.\1" target="_blank">\2</a>'$string); 
            
    $string eregi_replace('\[url=http://www.([^\[]*)\]([^\[]*)\[/url\]''<a href="http://www.\1" target="_blank">\2</a>'$string); 
            
    $string eregi_replace('\[url=([^\[]*)\]([^\[]*)\[/url\]''<a href="\1" target="_blank">\2</a>'$string);
            
    $string eregi_replace('\[url_www.([^\[]*)\]([^\[]*)\[/url\]''<a href="http://www.\1" target="_self">\2</a>'$string); 
            
    $string eregi_replace('\[url_([^\[]*)\]([^\[]*)\[/url\]''<a href="\1" target="_self">\2</a>'$string);

            
    $string str_replace("\n""<br>"$string);
    //         $string = nl2br($string);
            
            
    $string str_replace('[b]''<b>'$string);
            
    $string str_replace('[/b]''</b>'$string);
            
    $string str_replace('[i]''<i>'$string);
            
    $string str_replace('[/i]''</i>'$string);
            
    $string str_replace('[u]''<u>'$string);
            
    $string str_replace('[/u]''</u>'$string);
            
    $string str_replace('[c]''<div class="tbl_small">Code:</div><table width="100%" cellspacing="1" cellpadding="2"><tr><td>'$string);
            
    $string str_replace('[/c]''</td></tr></table>'$string);
            
    $string str_replace('[quote]''<blockquote><div class="tbl_small">Zitat:</div><table width="70%" cellspacing="1" cellpadding="2" class="tbl_4"><tr class="tbl_7"><td>'$string);
            
    $string str_replace('[/quote]''</td></tr></table></blockquote>'$string);
            
    $string eregi_replace('\[img\]([^\[]*)\[/img\]''<img src="\1" border="1" class="img">'$string);
            
    $string str_replace(':angel:'$img_start 'smilie_angel.gif' $img_end$string);
            
    $string str_replace(':angry:'$img_start 'smilie_angry.gif' $img_end$string);
            
    $string str_replace(':P'$img_start 'smilie_cheeky.gif' $img_end$string);
            
    $string str_replace(':confused:'$img_start 'smilie_confused.gif' $img_end$string);
            
    $string str_replace(':finger:'$img_start 'smilie_finger.gif' $img_end$string);
            
    $string str_replace(':karate:'$img_start 'smilie_karate.gif' $img_end$string);
            
    $string str_replace('=)'$img_start 'smilie_lol.gif' $img_end$string);
            
    $string str_replace(':rolleyes:'$img_start 'smilie_rolleyes.gif' $img_end$string);
            
    $string str_replace(':sleep:'$img_start 'smilie_sleep.gif' $img_end$string);
            
    $string str_replace(':)'$img_start 'smilie_smile.gif' $img_end$string);
            
    $string str_replace(':rolleyes:'$img_start 'smilie_.gif' $img_end$string);
            
    $string str_replace(':ugh:'$img_start 'smilie_ugh.gif' $img_end$string);
            
    $string str_replace(';)'$img_start 'smilie_wink.gif' $img_end$string);
            
    $string str_replace('[color=darkred]''<font color="darkred">'$string);
            
    $string str_replace('[color=red]''<font color="red">'$string);
            
    $string str_replace('[color=orange]''<font color="orange">'$string);
            
    $string str_replace('[color=brown]''<font color="brown">'$string);
            
    $string str_replace('[color=yellow]''<font color="yellow">'$string);
            
    $string str_replace('[color=green]''<font color="green">'$string);
            
    $string str_replace('[color=olive]''<font color="olive">'$string);
            
    $string str_replace('[color=cyan]''<font color="cyan">'$string);
            
    $string str_replace('[color=blue]''<font color="blue">'$string);
            
    $string str_replace('[color=darkblue]''<font color="darkblue">'$string);
            
    $string str_replace('[color=indigo]''<font color="indigo">'$string);
            
    $string str_replace('[color=violet]''<font color="violet">'$string);
            
    $string str_replace('[color=black]''<font color="black">'$string);
            
    $string str_replace('[/color]''</font>'$string);
            
    $string str_replace('[size=7]''<font style="font-size:7px">'$string);
            
    $string str_replace('[size=9]''<font style="font-size:9px">'$string);
            
    $string str_replace('[size=12]''<font style="font-size:12px">'$string);
            
    $string str_replace('[size=18]''<font style="font-size:18px">'$string);
            
    $string str_replace('[size=24]''<font style="font-size:24px">'$string);
            
    $string str_replace('[/size]''</font>'$string);
            

            return 
    $string;
        } 
    Zusätzlich hab ich noch eine eine Highlighting Funktion im Codeschnippselforum gefunden, die wie schon ausprobiert auch funktoniert.

    Folgende Beiden Zeilen bereiten mir Probleme:

    PHP-Code:
    $string str_replace('[c]''<div class="tbl_small">Code:</div><table width="100%" cellspacing="1" cellpadding="2"><tr><td>'$string);

    $string str_replace('[/c]''</td></tr></table>'$string); 
    möchte ja nur den highlighter über den Text laufen lassen der code ist.
    Damit das wiederum geht müsste ich aus dem String genau die Textstellen rausfiltern, die sich zwischen "[c]" und "[/c]" befinden und in einer neuen Variable Speichern. Allerdings hab ich kein Plan und Regex war bisher nicht mein Freund

    Müsst das jedenfalls irgentwie rausfiltern und zwar jedesmal wenn diese Tag-Combi kommt.
    Gäbe Quasi ein array.

    Wer kann helfen? Sehe übrigens gerade dass das Board hier einiges anders anzeigt als es soll *g*

    MFG deschmiddi
    Geht net gibts net...

  • #2
    kennste das:

    http://de.php.net/manual/de/function...ght-string.php
    mfg
    marc75

    <Platz für anderes>

    Kommentar


    • #3
      Ja kenn ich... das problem ist nicht das highlighten selber sondern, der string der gehighlited wird *g*

      müsste einen weg finden, sobald er den text nach Zeichen durchsucht und zu html umwandelt zuerst aus dem Kompletten Text alle Stellen zu speichern, die sich zwischen Tags wie [c] und[/c] befinden, und diese in einem array speichern. das highliten des Textes im array is nicht mein problem.

      Also wer ist Reg-ex spezie. Habs manual gelesen. Aber Wie gesagt Regex sind nicht meine Freunde. Vielleicht werdens sie es ja durch euch.
      Geht net gibts net...

      Kommentar


      • #4
        hmm,

        ich würde dir empfehlen, die gefundenen code-stellen nicht erst zwischenzuspeichern, sondern direkt mit dem gehighlighteten text zu ersetzen ...

        also, entweder per preg_replace + modifier e oder preg_replace_callback ...

        http://www.php-resource.de/tutorials/read/10/1/

        text zwischen [c] und [/c] findest du mit z.b.
        Code:
        #\[c\](.+)\[/c\]#U
        oder wodrum gehts?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          danke dir ich glaub das hilf mir weiter... werds gleich mal ausprobieren.
          Vielen dank.
          Wenn was net klappt meld ich mich nochmal.
          Aber ich denke mal darum gehts.
          Geht net gibts net...

          Kommentar


          • #6
            Sry aber es klappt doch net so...

            ich muss dass den teil des textes, der code ist in eine extra variable speichern.


            Allerdings peil ichs ichs wiederum net welchen befehl ich brauche, um die textstellen nach folgendem Kriterium zu suchen:

            #\[c\](.+)\[/c\]#U

            und auszugeben.

            Brauche alle Textstellen in einer extra Variable.
            Kann mir jemand helfen? Hab im Manual nix gefunden.
            Geht net gibts net...

            Kommentar


            • #7
              Brauche alle Textstellen in einer extra Variable.
              nein, brauchst du nicht. das ist total sinnlos.

              wenns denn sein muß: preg_match_all

              ansonsten, da du es wohl übersehen hast: http://www.php-resource.de/tutorials/read/10/1/
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Hab den link gelesen...


                also meine Zeile sieht so aus:

                PHP-Code:
                $string preg_replace('#\[c\](.+)\[/c\]#U'
                '<blockquote><div class="tbl_small">Code:</div>
                <table width="100%" cellspacing="1" cellpadding="2" class="tbl_4">
                <tr class="tbl_7">
                <td>'
                .highlight_string($stringTRUE).'</td>
                </tr></table></blockquote>'
                $string); 
                An dieser stelle
                PHP-Code:
                highlight_string($stringTRUE
                highlighte ich dann aber den kompletten string und nicht den vorher ausgesuchten durch

                PHP-Code:
                #\[c\](.+)\[/c\]#U 
                Was müsst ich da ändern? Blicks einfach net ... obwohl link angeschaut.
                Warscheins seh ich vor lauter Bäumen den Wald net *g*.
                Würds ja gerne mit preg_replace oder preg_match machen, weiß nur net wie ???

                Desweiteren hab ich den Eindruck falls ich mich net irre, dass bei dieser Suche [c] und [/c] miteingeschlossen sind. Die dürfen aber nicht dabei sein, sondern nur das, was genau dazwischen steht.
                Geht net gibts net...

                Kommentar


                • #9
                  Hab den link gelesen...
                  ja ja
                  An dieser stelle
                  PHP-Code:
                  highlight_string($stringTRUE
                  highlighte ich dann aber den kompletten string und nicht den vorher ausgesuchten durch
                  ja, das hast du auch so angegeben ...
                  Desweiteren hab ich den Eindruck falls ich mich net irre, dass bei dieser Suche [c] und [/c] miteingeschlossen sind. Die dürfen aber nicht dabei sein, sondern nur das, was genau dazwischen steht.
                  davon ist auszugehen ...
                  Code:
                    $string = "[c]<?php echo 'sick of it all'; ?>[/c]";
                  
                    $string = preg_replace('#\[c\](.+)\[/c\]#Uise',
                      "'<blockquote><div class=\"tbl_small\">Code:</div>
                      <table width=\"100%\" cellspacing=\"1\" cellpadding=\"2\" class=\"tbl_4\">
                      <tr class=\"tbl_7\">
                      <td>'.highlight_string('\\1', TRUE).'</td>
                      </tr></table></blockquote>'", $string);
                  
                    echo $string;
                  ich war so frei, die modifier e, i und s einzufügen ... damit sollten alle fälle abgedeckt sein. wenn nicht, sollte dir eine anpassung doch leicht fallen ...

                  ach ja, der modifier e veranlaßt php zu folgenden:
                  im ersatzstring werden die backreferences ersetzt, der ersatz wird dann wie php-code ausgewertet, und die rückgabe der auswertung wird als ersatzstring verwendet.
                  Zuletzt geändert von derHund; 15.11.2004, 19:57.
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Dickes Danke,
                    jetzt werd ich mich dransetzen , deine Lösung zu verstehen.
                    und ích werde solange sick sein, bis ich verstanden hab wies funkt.

                    Gehöre net zu denjenigen die die Lösung auf em Tablett wollen.
                    Grieg lieber alles selber hin.
                    Danke nochmal, deine Lösung funzt einwandfrei!

                    MFG deschmiddi
                    Geht net gibts net...

                    Kommentar

                    Lädt...
                    X