Bernd: Reguläre Ausdrücke oder str_replace ?

Hallo,
ich möchte in einem String Leerzeichen, Umlaute und sonstige nicht-Zahlung und nicht-Buchstaben ersetzen. Wäre es effizienter für den Server ein paar mal str_replace durchlaufen zu lassen oder es mit preg_replace zu versuchen? Kann man überhaupt mit preg_replace mehrere Umlaute auf einen Schlag ändern (ä -> ae oder ö -> oe)?

Gruß Bernd

  1. Hi,

    Kann man überhaupt mit preg_replace mehrere Umlaute auf einen Schlag ändern (ä -> ae oder ö -> oe)?

    Siehe Bsp 5

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Hallo!

    Wäre es effizienter für den Server ein paar mal str_replace durchlaufen zu lassen oder es mit preg_replace zu versuchen?

    str_replace ist natürlich schneller.

    Unter http://www.php.net/str_replace gibt es auch ein Beispiel.

    siehe:
    // Provides: You should eat pizza, beer, and ice cream every day
    $phrase  = "You should eat fruits, vegetables, and fiber every day.";
    $healthy = array("fruits", "vegetables", "fiber");
    $yummy  = array("pizza", "beer", "ice cream");

    André Laugks

    --
    Die Frau geht, die Hilti bleibt!
  3. Hi!

    ich möchte in einem String Leerzeichen, Umlaute und sonstige nicht-Zahlung und nicht-Buchstaben ersetzen. Wäre es effizienter für den Server ein paar mal str_replace durchlaufen zu lassen oder es mit preg_replace zu versuchen? Kann man überhaupt mit preg_replace mehrere Umlaute auf einen Schlag ändern (ä -> ae oder ö -> oe)?

    Leerzeichen und Umlaute lassen sich einfach mit str_replace ersetzen. str_replace hat zudem den Vorteil, dass du für das Suchmuster und die Ersetzungen Arrays verwenden kannst, was bei preg_replace nicht möglich ist, d.h. du kannst auf einen Schlag mehrere verschiedene Ersetzungen durchführen:

      
    $string = 'Ein String mit vielen Umlauten: ÄäÜüÖö';  
    $search = array('Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü');  
    $replace = array('Ae', 'ae', 'Oe', 'oe', 'Ue', 'ue');  
      
    $string = str_replace($search, $replace, $string);  
    echo $string; // Ausgabe: Ein String mit vielen Umlauten: AeaeUeueOeoe  
    
    

    Zudem ist str_replace schneller als preg_replace. Solltest du jedoch kompliziertere Stringersetzungen brauchen, solltest du preg_replace den Vorzug geben.

    Grüße,
    Fabian St.

    --
    Meine Website: http://fabis-site.net
    --> XHTML, CSS, PHP-Formmailer, Linux
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
    1. Hi,

      str_replace hat zudem den Vorteil, dass du für das Suchmuster und die Ersetzungen Arrays verwenden kannst, was bei preg_replace nicht möglich ist

      Doch, das geht:
      $str    =  "Dies; ist, ein. Text;.!,";
      $xy     =  array("/./","/,/","/;/",);
      $zy     =  array( " "," "," ",);
      echo preg_replace($xy, $xz, $str);

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. Hi,

        Doch, das geht:
        $str    =  "Dies; ist, ein. Text;.!,";
        $xy     =  array("/./","/,/","/;/",);
        $zy     =  array( " "," "," ",);
        echo preg_replace($xy, $xz, $str);

        Warum so umständlich?

          
        $str    =  "Dies; ist, ein. Text;.!, ";  
        $xy     =  array("/\./","/,/","/;/",);  
        $zy     =  " ";  
        echo preg_replace($xy, $zy, $str);  
        
        

        ;-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hi Cybaer,

          Warum so umständlich?

          $str    =  "Dies; ist, ein. Text;.!, ";
          $xy     =  array("/./","/,/","/;/",);
          $zy     =  " ";
          echo preg_replace($xy, $zy, $str);

            
          Warum nicht noch einfacher?  
            
          ~~~php
            
          $str    =  "Dies; ist, ein. Text;.!, ";  
          echo preg_replace("/[,.;]/", " ", $str);  
          
          

          ;-)

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          That's life - Es gibt im Leben[tm] keine Zurück-Taste. (Fabian Transchel)
          1. Hi,

            Warum so umständlich?

            bitte Leute, das war eine Demo das Arrays angenommen werden. Statt " ", " ", " " haette ich auch "haarwasser", "haareraufer", "haarespalter" schreiben koennen ;-)

            Gruesse, Joachim

            --
            Am Ende wird alles gut.
            1. Hi,

              Statt " ", " ", " " haette ich auch "haarwasser", "haareraufer", "haarespalter" schreiben koennen ;-)

              Klaaaaaar. ;-)

              Aber immerhin ist es IMHO doch ggf. interessant, daß man für den Ersatz zwar ein Array verwenden kann, dies aber nicht muß - auch wenn das zu Ersetzende in einem Array steht. :)

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          2. Hi,

            Warum nicht noch einfacher?

            Weil das dann *überhaupt kein* Array mehr enthält? =;-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hi Cybaer,

              Warum nicht noch einfacher?

              Weil das dann *überhaupt kein* Array mehr enthält? =;-)

              Was das überhaupt die „Aufgabenstellung”? =)

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
              Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters auf die man sich bezieht! Nicht einfach alles.
              1. Hi,

                Weil das dann *überhaupt kein* Array mehr enthält? =;-)
                Was das überhaupt die „Aufgabenstellung”? =)

                Interessiert die im Laufe eines Threads denn überhaupt noch? O:-)

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Hi Cybaer,

                  Was das überhaupt die „Aufgabenstellung”? =)

                  Interessiert die im Laufe eines Threads denn überhaupt noch? O:-)

                  Das muss ich mal einem Lehrer in während einer Arbeit sagen... ;-)

                  MfG, Dennis.

                  --
                  Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                  Auf viele Fragen weiß auch Wikipedia eine Antwort.
                  1. Hi,

                    Was das überhaupt die „Aufgabenstellung”? =)
                    Interessiert die im Laufe eines Threads denn überhaupt noch? O:-)
                    Das muss ich mal einem Lehrer in während einer Arbeit sagen... ;-)

                    Warnung: Du könntest einen Threat auslösen! ;-)

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                    1. Hi Cybaer,

                      Warnung: Du könntest einen Threat auslösen! ;-)

                      Könnte leicht passieren, vor allem bei so Lehrer, die zu 100% humorlos sind und keine Witze verstehen - so etwas gibt es leider. "Pädagogisch nicht sinnvoll" (für die Schüler), wie es ein Lehrer formulieren würde ;-)

                      MfG, Dennis.

                      --
                      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                      Man sollte nie aufhören zu fragen (Alber Einstein)
                      ... aber natürlich erst, nachdem man sämliche FAQ's und Archive durchgelesen hat :-P
                      1. Hi,

                        Könnte leicht passieren, vor allem bei so Lehrer, die zu 100% humorlos sind und keine Witze verstehen - so etwas gibt es leider.

                        Echt? Ich dachte, die wären alle so! ;->

                        Gruß, Cybaer

                        PS: Sprech mal einen beliebigen Einzelhändler an auf das Thema: "Wie sind eigentlich Lehrer als Kunden?" >;->

                        --
                        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                        1. Hi Cybaer,

                          Echt? Ich dachte, die wären alle so! ;->

                          Ne, sind nur 99% :-P

                          PS: Sprech mal einen beliebigen Einzelhändler an auf das Thema: "Wie sind eigentlich Lehrer als Kunden?" >;->

                          Der arme Einzelhändler - zwing ihn doch nicht, sich an so etwas zu erinnern *g*

                          MfG, Dennis.

                          --
                          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                          Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker gehören und nicht hier her?
      2. Hi!

        str_replace hat zudem den Vorteil, dass du für das Suchmuster und die Ersetzungen Arrays verwenden kannst, was bei preg_replace nicht möglich ist
        Doch, das geht:
        [...]

        Du hast recht ;-) Ich hätte mir selber bloß den Link anschauen müssen... Ich hatte jedoch irgendwie im Kopf, dass eine dieser preg_*-Funktionen kein Array als Parameter akzeptiert.

        Grüße,
        Fabian St.

        --
        Meine Website: http://fabis-site.net
        --> XHTML, CSS, PHP-Formmailer, Linux
        ---------------------
        fabi@erde ~# whatis spam
        spam: nothing appropriate
        ---------------------
        Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
    2. Hallo,
      dass man str_replace mit Array einsetzen kann ist mir neu. Gute Idee!

      mfg Bernd

  4. Wäre es effizienter für den Server ein paar mal str_replace durchlaufen zu lassen oder es mit preg_replace zu versuchen?

    Tja, das kommt drauf an, wie oft "ein paar mal" sind...
    Generell solltest du immer die String-Funktionen nutzen, wenn es gut möglich ist. Die arbeiten um einiges schneller als reguläre Ausdrücke. RegExps sind immer langsam. Die PCRE-Funktionen (also die mit "preg") arbeiten schneller als die älteren POSIX-kompatiblen, aber trotzdem sind sie noch langsam.
    Wenn es dir nur auf eine kurze Ersetzung ankommt (vielleicht bei einem Gästebuch oder so), dann wird das überhaupt keine Rolle spielen. Wenn du aber viele solche Ersetzungen durchführst, dann kann das natürlich irgendwann schon ins Gewicht fallen.
    Ich schätze die String-Funktionen sind vielleicht 10mal schneller als die preg-Funktionen. Das ist aber wirklich nur eine Schätzung. Wenn du es genau wissen willst, dann kannst du es ja selber ausprobieren.
    Laß dir die aktuelle Zeit in Microsekunden ausgeben, führe deine Ersetzung durch und laß dir danach wieder die aktuelle Zeit in Microsekunden ausgeben.
    So siehst du dann doch, wie lange die Ersetzungen gedauert haben und was in deinem Fall schneller ist.

    Gruß,
    rob