depp: RegExp.: erster Buchstabe groß

moin
wie bekomm ich es gebacken, dass durch preg_replace jeweils der anfangsbuchstabe großgeschrieben wird, wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...
danke für hilfe

  1. Hi depp,

    wie bekomm ich es gebacken, dass durch preg_replace jeweils der anfangsbuchstabe großgeschrieben wird, wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...

    Zum Umwandeln des Buchstaben in einen Großbuchstaben nutzt du die Funktion strtoupper(), damit du diese im zweiten Parameter von preg_replace nutzen kannst, musst du den Modifier e benutzen.

    Theoretisch müsste das so in etwa gehen, habe es allerdings nicht getestet:

    preg_replace("/([\-_\/ ][a-z])/e", "strtoupper($1)", $string);

    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. Heißa, Dennis,

      wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...

      preg_replace("/([\-_\/ ][a-z])/e", "strtoupper($1)", $string);

      Du hast den Anfang vergessen:

      preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1\')', $string;

      Außerdem habe ich bei strtoupper die Anführungszeichen hinzugefügt, da er sonst afaik den Inhalt der Variable auszurühren versucht. Zumindest hatte ich neulich ein ähnliches Problem.

      Den Backslash vor dem - habe ich auch weggemacht. Ich bin mir nicht sicher, ob das mit dem überhaupt funktioniert. Jedenfalls baut man einen Bindestrich in eckige Klammern ein, indem man ihn gleich an den Anfang schreibt. (Ich hoffe, ich habe da jetzt nicht etwas verwechselt)

      Caramba!
      Grüße aus Biberach Riss,
      Candid Dauth (ehemals Dogfish)

      --
      „Versuche niemals, dein Ansehen auf Kosten der Vernunft zu steigern.“ | Mein SelfCode
      http://cdauth.de/
      1. Hi Candid,

        Du hast den Anfang vergessen.

        Stimmt, du hast Recht - wenn wir jetzt schon aber dabei sind, dann hast du auch den "Anfang" vergessen ;-)

        $string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1\')', $string);

        Außerdem habe ich bei strtoupper die Anführungszeichen hinzugefügt, da er sonst afaik den Inhalt der Variable auszurühren versucht.

        Ich habe es dann jetzt doch gerade mal getestet - meine Version ohne Anfz. ergab:
          Warning:  Wrong parameter count for strtoupper()
        Deine ist aber auch nicht das Wahre - bei einem String
          $string = "es war einmal ein schöner tag";
        wird lediglich ausgegeben:
          s ar inmal in chöner ag

        Du lässt nämlich $2 vollkommen wegfallen ;-)

        Richtig wäre also:

        $string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);

        Den Backslash vor dem - habe ich auch weggemacht. Ich bin mir nicht sicher, ob das mit dem überhaupt funktioniert. Jedenfalls baut man einen Bindestrich in eckige Klammern ein, indem man ihn gleich an den Anfang schreibt. (Ich hoffe, ich habe da jetzt nicht etwas verwechselt)

        Auch das habe ich gerade nochmal getestet:

        $string = "es war einmal ein schöner tag -a";  
          
        $zeichenklasse = "[\-_\\/ ]";  
        //Ausgabe: Es War Einmal Ein Schöner Tag -A  
          
        $zeichenklasse = "[_\\/ \-]";  
        //Ausgabe: Es War Einmal Ein Schöner Tag -A
        

        Funktioniert also beides ;-)

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)
        1. :-)
          so klappts.
          DANKE euch allen!

        2. Heißa, Dennis,

          Du lässt nämlich $2 vollkommen wegfallen ;-)

          Stimmt. Am Anfang des Schreibens des Postings habe ich das noch bedacht, aber währenddessen habe ich wohl vergessen, fertigzudenken. ;-)

          $string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);

          Warum schließt du $1 in strtoupper ein?

          Ich würde vorschlagen:
          $string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', '\'$1\'.strtoupper(\'$2\')', $string);

          Wenn das so weiter geht, müssen wir irgendwann einen Artikel drüber schreiben… ;-)

          Caramba!
          Grüße aus Biberach Riss,
          Candid Dauth (ehemals Dogfish)

          --
          „Erwecke niemals bei jemandem dem Eindruck, dass er etwas anders machen solle, weil er es anders macht als du, wenn er es besser macht als du.“ | Mein SelfCode
          http://cdauth.de/
          1. Hi Candid,

            $string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);

            Warum schließt du $1 in strtoupper ein?

            *gähn* Soll ich dich jetzt noch mal ganz frech bitten, das was du geschrieben hast noch mal zu überdenken? ;-)

            $string = "hallo candid, geht das? ja/nein";  
            echo $string;  
              
            $string = preg_replace('/([_\\/ \-]|^)([a-z])/ei', 'strtoupper(\'$2\')', $string);  
            echo $string;  
              
            /* Ausgabe:  
                 hallo candid, geht das? ja/nein  
                 HalloCandid,GehtDas?JaNein  
            */
            

            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. Heißa, Dennis,

              *gähn* Soll ich dich jetzt noch mal ganz frech bitten, das was du geschrieben hast noch mal zu überdenken? ;-)

              $string = preg_replace('/([_\\/ \-]|^)([a-z])/ei', 'strtoupper(\'$2\')', $string);

              Das habe ich nicht geschrieben. Zumindest nicht in dem Posting, auf das du geantwortet hast. :P

              Ich habe $1 aus strtoupper herausgenommen, da es nur zusätzliche Rechenleistung verbraucht, das Trennzeichen (welches nicht aus Buchstaben besteht) in Großbuchstaben umzuwandeln. Zwar ist jene Leistung minimal, aber wir wollen ja global denken… ;-)

              Deswegen steht in meinem (letzten) Code $1 außerhalb von strtoupper.

              Caramba!
              Grüße aus Biberach Riss,
              Candid Dauth (ehemals Dogfish)

              --
              „Jemanden zu lieben bedeutet, ihn nicht zu erdrücken, auch wenn man es gerne wollte – aus Liebe.“ | Mein SelfCode
              http://cdauth.de/
              1. Hi Candid,

                Deswegen steht in meinem (letzten) Code $1 außerhalb von strtoupper.

                Hab ich wohl übersehen - Peinlich! ;-)

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                Wissen ist gut, Können ist besser, aber das Beste und Interessanteste ist der Weg dahin! (Detlef G.)
      2. moin
        erstmal danke. aber leider gehts noch nicht so ganz...
        $string="abc def ghi";
        ...('/([-_\/ ]|^)([a-z])/ei', 'strtoupper('$1')', ...
        =>bc ef hi
        also nun sind die buchstaben ganz weg. so kann man seine probleme quasi beseitigen... das ist die notlösung ;-)
        was stimmt noch nicht dran?
        danke

        1. Hi depp,

          also nun sind die buchstaben ganz weg. so kann man seine probleme quasi beseitigen... das ist die notlösung ;-)

          LOL - tja, das ist doch mal wirklich „produktiv” ;-)

          was stimmt noch nicht dran?

          Da muss ich wohl ein paar Millisekunden schneller gewesen sein als du, guckst du hier.

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.