Anzeige

Problem mit Regex...

Problem mit Regex... | PSD-Tutorials.de

Erstellt von erti, 10.10.2006.

  1. erti

    erti Blabubb

    Dabei seit:
    24.07.2006
    Beiträge:
    221
    Geschlecht:
    männlich
    Problem mit Regex...
    Hey!

    Also wie die Überschrift schon sagt, hab ich ein Problem mit Regex!

    Und zwar bastel ich mir grad nen BBCode, aber ich kriegs irgendwie nicht hin...

    Hier ist die Funktion:


    [php:1:85171639d6]<?
    $str = preg_replace("/\[b\](.*)\[\/b\]/Use", "\\1", $str);
    ?>[/php:1:85171639d6]




    Und das sind die Fehlermeldungen:

    Code (Text):
    1.  
    2.     Parse error: parse error, unexpected '<' in H:\internet\xampp\htdocs\Scripte\guestbook v1.0\include\settings.inc.php(22) : regexp code on line 1
    3.  
    4. Fatal error: preg_replace() [[url='function.preg-replace']function.preg-replace[/url]]: Failed evaluating code: &b&Hallo!&/b& in H:\internet\xampp\htdocs\Scripte\guestbook v1.0\include\settings.inc.php on line 22
    5.  

    Ich hoffe ihr könnt mir helfen!

    glg erti[php:1:85171639d6][/php:1:85171639d6]
     
    #1      
  2. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Problem mit Regex...
    Hmmm, ist das das einzige preg_replace im Code?
    Die Fehlermeldung sagt mir erstmal nichts, versuch es mal so:

    [php:1:1786de7155]
    $str = preg_replace("@\[b\](.*?)\[\/b\]@", "$1", $str);
    [/php:1:1786de7155]

    Also eigentlich nur mit anderen Delimitern (und aus Schönheitsgründen besserem HTML :p ).


    Duddle
     
    #2      
  3. erti

    erti Blabubb

    Dabei seit:
    24.07.2006
    Beiträge:
    221
    Geschlecht:
    männlich
    Problem mit Regex...
    Nein, war nicht das preg_replace...
    Aber ich hab jetzt alle umgeändert, so wies dus gepostet hast, und jetzt funtzts...
    Danke...

    Könntest du mir vllt. sagen, was an meiner Version falsch war?
    Und kennst du vllt. eine Seite, die Regex gut erklärt, denn das würd ich mir noch gern beibringen!^^

    glg erti
     
    #3      
  4. NicoB

    NicoB Hat es drauf

    Dabei seit:
    22.07.2005
    Beiträge:
    3.491
    Geschlecht:
    weiblich
    Problem mit Regex...
    Würde mal sagen, da fehlt die Variable :)
     
    #4      
  5. erti

    erti Blabubb

    Dabei seit:
    24.07.2006
    Beiträge:
    221
    Geschlecht:
    männlich
    Problem mit Regex...
    Welche Variable fehlt?
     
    #5      
  6. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Problem mit Regex...
    Was genau falsch war kann ich dir nicht sagen (bin auch nur Anfänger auf dem Gebiet), aber begründen warum ich Dinge von deinem Code umgeändert habe:

    Deins:
    [php:1:c9538d8d54] $str = preg_replace("/\[b\](.*)\[\/b\]/Use", "\\1", $str); [/php:1:c9538d8d54]
    Meins:
    [php:1:c9538d8d54] $str = preg_replace("@\[b\](.*?)\[\/b\]@", "$1", $str);[/php:1:c9538d8d54]

    Geändert habe ich also
    1. den Delimiter (Begrenzer), weil: ich bis jetzt immer besser gefahren bin mit @ als Delimiter
    2. (.*) in (.*?), um die Suche ?non-greedy? zu machen, weil: non-greedy bedeutet, dass nur so wenig wie nötig in das Ergebnis geschlossen wird
    3. in , weil: semantischer als ist :) (schöneres HTML)
      [*]\\1 in $1, weil: ich nicht weiss, was du mit \\1 bezwecken willst und $1 die richtige Syntax zum Einsetzen des mit (.*?) gefundenen Textes führt


    Zum zweiten:
    http://de.wikipedia.org/wiki/Regex als Nachschlagewerk
    http://www.regenechsen.de/phpwcms/index.php?regex_allg als Anfangspunkt
    http://de3.php.net/manual/de/function.preg-replace.php für Beispiele (unten)


    Duddle
     
    #6      
  7. r3nt5ch3r

    r3nt5ch3r ~ Allround pG ~

    Dabei seit:
    10.03.2006
    Beiträge:
    1.836
    Geschlecht:
    männlich
    Problem mit Regex...
    :D

    warum einfach wenns auch kompliziert geht wa?^^

    [php:1:24d98a0fb1]$str = str_replace("[ b]","",$str);
    $str = str_replace("[ /b]","
    ",$str);[/php:1:24d98a0fb1]

    [ b] und [ /b] ohne leertaste^^
     
    #7      
  8. erti

    erti Blabubb

    Dabei seit:
    24.07.2006
    Beiträge:
    221
    Geschlecht:
    männlich
    Problem mit Regex...
    Klar, so hätts auch funktioniert, aber bei links usw. wär das ja schon net mehr so einfach gewesen! ;)

    Tja jedenfalls hab ich das jetzt auch schon geklärt! Nur hab ich jetzt noch ein Problem, was jetzt net mt Regex zu tun hat, aber ich wollt keinen neuen Thread dafür aufmachen!

    Also ich hab mir einen kleinen PHP Higlhighter gebaut und der soll jetzt nur zwischen dem php-Tag (BB-Code) angewendet werden...
    Das is ja auch noch kein Problem, aber das Problem is, das das ganze in meiner BB-Code funktion drin is!

    Die sieht so aus:

    [php:1:2ec30f0371]<?
    function eintrag_bearbeiten($str) {
    $str = htmlentities($str);
    $str = nl2br($str);
    $str = preg_replace("@\[b\](.*?)\[\/b\]@", "$1", $str);
    $str = preg_replace("@\[i\](.*?)\[\/i\]@","$1",$str);
    $str = preg_replace("@\[u\](.*?)\[\/u\]@","<u>$1</u>",$str);
    $str = preg_replace("@\[red\](.*?)\[\/red\]@", "<span style=\"color:#FF0000;\">$1</span>", $str);
    $str = preg_replace("@\[blue\](.*?)\[\/blue\]@", "<span style=\"color:#0000FF;\">$1</span>", $str);
    $str = preg_replace("@\[green\](.*?)\[\/green\]@", "<span style=\"color:#00FF00;\">$1</span>", $str);
    $str = preg_replace("@\[pink\](.*?)\[\/pink\]@", "<span style=\"color:#FF00FF;\">$1</span>", $str);
    $str = preg_replace("@\[orange\](.*?)\[\/orange\]@", "<span style=\"color:#FF6600;\">$1</span>", $str);
    $str = str_replace(":)", "<img src=\"pics/smilies/smile.gif\" />", $str);
    $str = str_replace(":D", "<img src=\"pics/smilies/laugh.gif\" />", $str);
    $str = str_replace(";)", "<img src=\"pics/smilies/wink.gif\" />", $str);
    $str = str_replace("O_O", "<img src=\"pics/smilies/wow.gif\" />", $str);
    $str = str_replace(":s", "<img src=\"pics/smilies/confused.gif\" />", $str);
    $str = str_replace("8)", "<img src=\"pics/smilies/cool.gif\" />", $str);
    $str = str_replace("-_-", "<img src=\"pics/smilies/redface.gif\" />", $str);
    $str = str_replace(":roll:", "<img src=\"pics/smilies/roll.gif\" />", $str);
    $str = str_replace(":(", "<img src=\"pics/smilies/sad.gif\" />", $str);
    $str = str_replace(":((", "<img src=\"pics/smilies/cry.gif\" />", $str);
    $str = str_replace(":|", "<img src=\"pics/smilies/mad.gif\" />", $str);
    $str = str_replace(":evil:", "<img src=\"pics/smilies/evil.gif\" />", $str);
    $str = str_replace(":twisted:", "<img src=\"pics/smilies/twisted.gif\" />", $str);
    $str = preg_replace ("/\[php\](.*)\[\/php\]/Use", "''.synhigh('\\1').''" , $str);
    return $str;
    }
    ?>[/php:1:2ec30f0371]

    Tja jetzt sieht der bearbeitet Eintrag aber nicht so aus wie er aussehen sollte:

    [php:1:2ec30f0371]<?
    echo "Hello World!";
    ?>
    [/php:1:2ec30f0371]

    sondern so:

    [php:1:2ec30f0371]

    &?



    echo &Hello World&;



    ?&
    [/php:1:2ec30f0371]


    Ich glaub das Problem sollte gelcích erkenbar sein! -gg-
    Also die Funktion htmlentities(); bearbeitet den ganzen String, der aus der Datenbank her, z.B. bei nem Forum oder Gästebuch, ausgegeben werden soll...
    Dadurch kommen zum Highlight-code viele HTML Sonderzeichen hinzu, was aber nicht passieren soll!

    Wie kann ich es machen, dass htmlentities(); den ode zwischen den php-Tags (BB-Code) "in Ruhe lässt"?

    Ich hoffe ihr könnt mir helfeb!

    glg erti
     
    #8      
  9. erti

    erti Blabubb

    Dabei seit:
    24.07.2006
    Beiträge:
    221
    Geschlecht:
    männlich
    Problem mit Regex...
    Ich hoffe das verstößt hier net gegen die Regeln wenn ich nach mehreren Tage einen kleinen *push* mache! -gg-
     
    #9      
  10. CIX88

    CIX88 Aktives Mitglied

    Dabei seit:
    06.04.2006
    Beiträge:
    814
    Geschlecht:
    männlich
    Ort:
    GR
    Problem mit Regex...
    str_replace() kann auch mit Array arbeiten.
    Es ist nicht nötig 20-30 Zeilen mit preg_replace() zu füttern.
    Bedenke auch, dass preg_replace() einer Lib angehört, die dann extra angeworfen wird, was wiederum das eigentliche Suchen und Ersetzen langsamer macht als str_replace().

    Feste Werte wie [ b], [ i] etc... besser mit str_replace() bearbeiten.
    Wenn du allerdings WWW-Adressen ersetzen willst, dann ist preg_replace() besser geeignet.

    Der Modifer e ist hier unnötigt.
    An seiner Stelle solltest du besser Modifer i einsetzen, falls du weirhin mit Modifer arbeiten willst.
    http://www.regex-tester.de/regex_20061117170620.html
     
    #10      
x
×
×