Ruby Strings için gsub ve sub yöntemleri arasındaki fark nedir


Yanıtlar:


208

gGlobal olarak (tümü) yerine olduğu gibi, küresel açılımı:

İrb'de:

>> "hello".sub('l', '*')
=> "he*lo"
>> "hello".gsub('l', '*')
=> "he**o"

13
Evet. Şimdi anlıyorum. Savunmamda, bunun çok açık olduğunu düşünmüyorum ... Şimdiye kadar, yani.
Ryanmt

15
Açık olmadığı konusunda sana katılıyorum! Java bunları replaceve replaceAll. Ancak Ruby'nin kökleri gdeğiştiriciyi kullanan Perl'dedir. O şeylerden sadece biri.
Ray Toal

1
Neyse ki, artık açık. Gelecekte bileceğim.
Ryanmt

Bu arada, subçok daha hızlı gsub, burada bir kıyaslama var github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

Buna bazı farklı davranışlar görüyorum: Normal ifade gruplarını kullanırken A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" neden gsub!yalnızca ilk örneği buluyor / değiştiriyor gibi görünen herhangi bir fikriniz var mı?
Bennett Talpers

31

Aradaki fark, subbelirtilen modelin yalnızca ilk oluşumunun yerini alması, oysa gsubtüm oluşumların yerini almasıdır (yani, genel olarak yerini alır).


10
Bir dakika önce cevap verseydin, belki 1020 daha fazla temsilci senin olurdu. :)
Andrew Grimm

3
value = "abc abc"
puts value                                # abc abc
# Sub replaces just the first instance.
value = value.sub("abc", "---")
puts value                                # --- abc
# Gsub replaces all instances.
value = value.gsub("abc", "---")
puts value                                # --- ---

-2

subve gsubsırasıyla ilk ve tüm eşleşmeleri değiştirir.

sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
    fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)


sub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )  
##"An Introduction to R Software Course will be of 8 weeks duration"

gsub("4", "8", "An Introduction to R Software Course will be of 4 weeks duration" )
##"An Introduction to R Software Course will be of 8 weeks duration"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.