csdodo: regulärer ausdruck - umwandeln von Buchstaben

warum geht das nicht, ich erwarte eigendlich das alle kleinen Buchstaben in Große umgewandelt werden - passieren tut leider nichts :-(

Wo ist mein Denk/Syntaxfehler

$text = "DAS ist EIN test";
  $text2 = preg_replace('=[1]$=','[A-Z]',$text);

Danke

PS - Ich weis das es strtolower und strtoupper gibt, ich möchte es aber über einen regulären ausdruck machen.


  1. a-z ↩︎

  1. echo $begrüßung;

    warum geht das nicht, ich erwarte eigendlich das alle kleinen Buchstaben in Große umgewandelt werden - passieren tut leider nichts :-(
      $text = "DAS ist EIN test";
      $text2 = preg_replace('=[1]$=','[A-Z]',$text);
    Wo ist mein Denk/Syntaxfehler

    Für eine solche Anwendung ist der Parameter replacement von preg_replace() nicht vorgesehen. Außerdem passt dein Muster nur auf Strings mit genau einem Zeichen.

    echo "$verabschiedung $name";


    1. a-z ↩︎

    1. echo $begrüßung;

      warum geht das nicht, ich erwarte eigendlich das alle kleinen Buchstaben in Große umgewandelt werden - passieren tut leider nichts :-(
        $text = "DAS ist EIN test";
        $text2 = preg_replace('=[1]$=','[A-Z]',$text);
      Wo ist mein Denk/Syntaxfehler

      Für eine solche Anwendung ist der Parameter replacement von preg_replace() nicht vorgesehen. Außerdem passt dein Muster nur auf Strings mit genau einem Zeichen.

      echo "$verabschiedung $name";

      Wie würdest Du denn die Sache realisieren und wie müßte mein String aussehen damit er nicht nur 1 zeichen sondern alle abarbeitet?
      Hab mich bisher mit regulären ausdrücken beschäftigt, hab aber im moment die herausforderung es damit zu lösen.

      Danke


      1. a-z ↩︎

      1. echo $begrüßung;

        Wie würdest Du denn die Sache realisieren und wie müßte mein String aussehen damit er nicht nur 1 zeichen sondern alle abarbeitet?

        strtoupper(). Wenn das aus irgendwelchen Gründen nicht geht kommt vielleicht strtr() in Frage.
        Reguläre Ausdrücke verwendet man zum Suchen von Mustern.
        Dein Muster sucht momentan nach dem Anfang des Suchtextes, gefolgt von einem Zeichen aus a..z, gefolgt vom Ende des Suchtextes. Du müsstest einfach nur nach den Buchstaben suchen, das aber für jeden Buchstaben einzeln, um ihn gezielt mit seinem Großbuchstabenpendant ersetzen zu können.

        Hab mich bisher mit regulären ausdrücken beschäftigt, hab aber im moment die herausforderung es damit zu lösen.

        Das ist Unsinn. Du kannst auch versuchen, mit einer AK74 Dübellöcher in die Wand zu bekommen. Das wäre mal eine Herausforderung, obwohl es mit einer Bohrmaschine einfacher geht.

        echo "$verabschiedung $name";

        1. Moin!

          Du müsstest einfach nur nach den Buchstaben suchen, das aber für jeden Buchstaben einzeln, um ihn gezielt mit seinem Großbuchstabenpendant ersetzen zu können.

          Naja... Man kann sich eventuell auch anders behelfen. In Perl wäre das z.B. so:

            
          my %grossbuchstaben;  
          @grossbuchstaben{'a'..'z'}= ('A'..'Z');  
          # Also $grossbuchstaben{'a'} == 'A' etc.  
          $text=~ s/([a-z])/$grossbuchstaben{$1}/g;  
          
          

          Abgesehen davon, daß dies für diesen Fall hanebüchener Unsinn ist, geht es (in Perl) schon. Für andere Fälle kann die Vorgehensweise allerdings durchaus sinnvoll sein.

          Das ist Unsinn. Du kannst auch versuchen, mit einer AK74 Dübellöcher in die Wand zu bekommen. Das wäre mal eine Herausforderung, obwohl es mit einer Bohrmaschine einfacher geht.

          Der Vergleich gefällt mir ;-)

          -- Skeeve

          1. Hey,

            my %grossbuchstaben;
            @grossbuchstaben{'a'..'z'}= ('A'..'Z');

            Also $grossbuchstaben{'a'} == 'A' etc.

            $text=~ s/([a-z])/$grossbuchstaben{$1}/g;

            ~~~perl
              
            y/a-z/A-Z/  
            
            
            --
            水-金-地-火-木-土-天-海-冥
            1. Moin!

              y/a-z/A-Z/

              Nicht wer lesen kann ist klar im Vorteil, sondern nur der, der das Gelesene auch versteht.  
                
              Thema verfehlt, setzen, Sechs ;-)  
                
              \-- Skeeve
              
              1. Hab im Moment diese Lösung gefunden - offensichtlich
                geht es nicht ohne stroupper :-)

                echo preg_replace('/[a-z]', 'strtoupper("\0")', $text);

                Danke

          2. gudn tach!

            Naja... Man kann sich eventuell auch anders behelfen. In Perl wäre das z.B. so:

            my %grossbuchstaben;
            @grossbuchstaben{'a'..'z'}= ('A'..'Z');

            Also $grossbuchstaben{'a'} == 'A' etc.

            $text=~ s/([a-z])/$grossbuchstaben{$1}/g;

            
            > Abgesehen davon, daß dies für diesen Fall hanebüchener Unsinn ist, geht es (in Perl) schon [...]  
              
            und in php so aehnlich.  
              
            statt des arrays koennte man u.u. auch mittels des e-modifiers die funktion "lc" nehmen. auch das liesse sich nach php uebertragen.  
              
            das bereits genannte, kurze  
              `y/a-z/A-Z/;`{:.language-perl}  
            laesst sich wiederum afaik nicht so huebsch nach php uebertragen.  
              
            
            > > Du kannst auch versuchen, mit einer AK74 Dübellöcher in die Wand zu bekommen. Das wäre mal eine Herausforderung, obwohl es mit einer Bohrmaschine einfacher geht.  
            > Der Vergleich gefällt mir ;-)  
              
            ack. was ist schon so schlimm an der ak74?  
              
            prost  
            seth
            
  2. gudn tach!

    Ich weis das es strtolower und strtoupper gibt, ich möchte es aber über einen regulären ausdruck machen.

    da du mittlerweile schon einige nuetzliche antworten bekommen hast, vage ich es zu fragen, _warum_ du das mit regexp machen moechtest... also:
    warum moechtest du das eigentlich mit regexp machen?

    prost
    seth