[ruby-de] String-Bearbeitung, gsub

Wolfgang Nádasi-Donner ruby at wonado.de
Mi Aug 30 19:08:22 JST 2017


Am 30.08.2017 um 02:04 schrieb Die Optimisten:
> Hallo
> 
> "ab/cd".gsub( /\/(.)/,  "\\1".upcase)        # => "Abcd"
> # auf das wesentliche komprimiert
> Warum wird das .upcase nicht ausgeführt?, wie tut man das (gehts auch
> ohne Block)?
> 
> danke
> Andreas
> 
> 

btw: Du meintest wohl "abCd" als erwartetes Ergebnis

Ooops!? - Kann das bestätigen, was mich arg erstaunte. Ein paar
Experimente zeigten mir, dass die erkannte Gruppe offensichtlich zu
einem "seltsamen" Zeitpunkt eingefügt wird...


$ irb
irb(main):001:0> "ab/cd".gsub( /\/(.)/,  "\\1".upcase)
=> "abcd"
irb(main):002:0> "ab/cd".gsub( /\/(.)/,  '\1'.upcase)
=> "abcd"
irb(main):003:0> "ab/cd".gsub( /\/(.)/,  '\1\1'.upcase)
=> "abccd"
irb(main):004:0> "ab/cd".gsub( /\/(.)/,  '\1otto\1'.upcase)
=> "abcOTTOcd"
irb(main):005:0> "ab/cd".gsub( /\/(.)/){$1.upcase}
=> "abCd"

Ich sehe auf die Schnelle auch nur die Lösung mit Block (letzte Zeile),
aber die ist Golf-technisch gesehen sogar kürzer ;-)

Da ich mich derzeit nicht weiter mit Ruby beschäftige, kann ich auch
keine tiefer gehende Erklärung liefern. Vielleicht weiss aber jemand
anderes hier mehr.

Viele Grüsse, WoNáDo


Mehr Informationen über die Mailingliste ruby-de