Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_replace frage

Einklappen

Neue Werbung 2019

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

  • preg_replace frage

    Hi

    ich versuche mich gerade an regulären Expressions aber so ganz versteh ich es noch nicht:
    PHP-Code:
    $Help "<img class=\"smilie\" src=\"http://www.xxx.de/smilies/$1.gif\">";
    $input preg_replace('!(:.*?):!'$Help$input); 
    Das ersetzt mir alles zwischen 2 Doppelpunkten, auch wenn dazwischen mehrere Wört liegen. Ich möchte das aber nur auf ein Wort bezogen haben. Dh wenn da zB steht :winke: soll daraus mein Winkesmilie werden. Das klappt auch soweit, aber wenn im Text steht:
    "Hallo 7:30 bin ich da:" dann wird auch alles zwischen den beiden Doppelpunkten umgewandelt...

    Was mache ich falsch?


  • #2
    du musst halt zwischen den Doppelpunkten ausschließlich Buchstaben zulassen und nicht jedes Zeichen
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

    Kommentar


    • #3
      Wie mach ich das? Ich hab versucht diese Syntax zu verstehen, aber irgendwie versteh ich das nicht... Hab schon einige Seiten gelesen. Hab jetzt schon mit dem \b experimentiert, weil ich gelesen hab, da es Wortgrenzen symbolosiert aber bei
      PHP-Code:
      $input preg_replace('!\b(:.*?):\b!'$Help$input); 
      wird nur eine Fehlermeldung ausgegeben.

      Kommentar


      • #4
        du kannst doch auch Bereiche erlaubter Zeichen angeben

        [a-zA-Z] lässt halt nur Gross und Kleinbuchstaben zu .. das halt anstelle deines * da reinbasteln
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

        Kommentar


        • #5
          So?
          PHP-Code:
          $input preg_replace('!(:.[a-zA-Z]?):!'$Help$input); 
          da wird ein :dafuer: aber leider nicht ersetzt

          Kommentar


          • #6
            Juhu habs gefunden:
            PHP-Code:
            $input preg_replace('!:([A-Za-z0-9_]+?):!'$Help$input); 

            Kommentar


            • #7
              Warum dafür überhaupt ein preg_replace drüber jagen. Mache doch einfach zwei Arrays.

              PHP-Code:
              $arr_SmilieCodes = array(':box:',':reusper:',':kratz:');

              $arr_SmilieImages = array('<img src="box.gif">',
                                                 
              '<img src="reusper.gif">',
                                                 
              '<img src="kratz.gif">'
                                                
              ); 
              Und dann ein einfaches str_replace oder ein str_ireplace.

              PHP-Code:
              //str_replace
              $str_ShowSmilies str_replace($arr_SmilieCodes$arr_SmilieImages$str_DeinString);

              //str_ireplace
              $str_ShowSmilies str_ireplace($arr_SmilieCodes$arr_SmilieImages$str_DeinString); 
              Und schon werden alle deine Smilies ersetzt.

              Gruß Litter
              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
              http://www.lit-web.de

              Kommentar


              • #8
                Das hab ich auch schon überlegt, aber bei 200 smilies find ich das mühselig zumal ich dann jedesmal die Liste anpassen muss wenn neue dazu kommen

                Kommentar


                • #9
                  du weißt schon, dass du arrays auf recht einfache Art fortsetzen kannst ?

                  PHP-Code:
                  $arr_SmilieCodes[] = ':affe:'

                  $arr_SmilieImages[]= '<img src="affe" />'
                  damit müsstest du nicht jedesmal in array( ..) Liste was ändern
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                  Kommentar


                  • #10
                    Smilies mit triggercode und Grafikname in eine Mysql-Tabelle legen und aus dieser den von Litter vorgeschlagenen Array füllen. Dann setzt du neue Smilies einfach in die Tabelle dazu.

                    Wenn du eine weitere Spalte enum('aktiv','inaktiv') dazuerfindest, dann kannst du bestimmte S,ilies auch temporär deaktivieren.
                    PHP-Code:
                    if ($var != 0) {
                      
                    $var 0;

                    Kommentar


                    • #11
                      Zitat von Wolla Beitrag anzeigen
                      Wenn du eine weitere Spalte enum('aktiv','inaktiv') dazuerfindest, dann kannst du bestimmte S,ilies auch temporär deaktivieren.
                      Du kannst aber bei enum (Aufzählungen) nur einzelne Zeichen in die '' setzen. Also z.B. enum('j','n') und das Feld smilie_active nennen. Aber in solch einem Fall sollte man von einer Aufzählung denke ich absehen und eher ein Flagfeld daraus machen was man mit einem Tinyint Datentyp belegt und mit 0 und 1 arbeitet, dass spart in dem Fall auf alle Fälle Performance. Ich weis aber im Moment nicht wieviel Byte Tinyint einnimmt. Int nimmt soweit ich weis 4 Byte ein, kann sein das Tyniint dann nur 2 Byte einnimmt. Aber wie gesagt weis ich jetzt aus dem Stehgreif nicht wirklich.

                      Das hab ich auch schon überlegt, aber bei 200 smilies find ich das mühselig zumal ich dann jedesmal die Liste anpassen muss wenn neue dazu kommen
                      Wie Wolla schon erwähnte kannst du das ganz easy mit einer Datenbank umsetzen oder wenn keine DB zur Verfügung hast und / oder auch nicht einsetzen willst kannst du das genauso einfach mit einer Textdatei machen die du einfach via [MAN]file[/MAN] in ein Array einliest und dann weiter verarbeiten.

                      Gruß Litter
                      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                      http://www.lit-web.de

                      Kommentar


                      • #12
                        Zitat von litterauspirna Beitrag anzeigen
                        Du kannst aber bei enum (Aufzählungen) nur einzelne Zeichen in die '' setzen. Also z.B. enum('j','n')
                        falsch.
                        Zitat von litterauspirna Beitrag anzeigen
                        ein Flagfeld daraus machen was man mit einem Tinyint Datentyp belegt und mit 0 und 1 arbeitet, dass spart in dem Fall auf alle Fälle Performance.
                        auch falsch. Enums werden intern sowieso als Integers behandelt.

                        Vielleicht interessant dazu: http://www.mysqlperformanceblog.com/...hat-is-faster/
                        @fschmengler - @fschmengler - @schmengler
                        PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                        Kommentar


                        • #13
                          Zitat von fab Beitrag anzeigen
                          falsch.

                          auch falsch. Enums werden intern sowieso als Integers behandelt.

                          Vielleicht interessant dazu: http://www.mysqlperformanceblog.com/...hat-is-faster/

                          Danke, man kann sich auch mal irren. Aber in dem ersten Pubkt musste ich die Feststellung leider machen als ich versuchte enum('ja','nein'); anlegen wollte das es da im phpmyadmin ne Fehlermeldung gab die mir mitteilte das dies so nicht geht, also habe ich das darauf zurück geführt das da nur einzelne Zeichen einsetzbar sind.
                          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                          http://www.lit-web.de

                          Kommentar


                          • #14
                            enum ('ja','nein') NULL / oder default 'nein' hat bei mir bisher immer geklappt - sowohl von phpmyadmin aus, als auch ausm php script - da vermute ich eher den Fehler im abschließenden Komma , wenn dahinter weitere Spalten definiert werden - oder eben kein Komma , wenn die Definition dieser Tabelle damit beendet ist evtl hast du dich auch zwischen Hochkomma und Backtick vertan ^^
                            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                            Kommentar

                            Lädt...
                            X