Apa perbedaan antara gsub dan sub metode untuk Ruby Strings

111

Saya telah membaca dokumentasi untuk Stringhari ini, dan saya melihat :submetodenya, yang tidak pernah saya perhatikan sebelumnya. Saya telah menggunakan :gsubdan tampaknya mereka pada dasarnya sama. Adakah yang bisa menjelaskan perbedaannya kepada saya? Terima kasih!

Ryanmt
sumber

Jawaban:

208

The gsingkatan global, seperti dalam menggantikan global (semua):

Dalam irb:

>> "hello".sub('l', '*')
=> "he*lo"
>> "hello".gsub('l', '*')
=> "he**o"
Ray Toal
sumber
13
Ya. Saya mengerti sekarang. Dalam pembelaan saya, saya rasa ini tidak terlalu jelas ... Sampai sekarang, begitulah.
Ryanmt
15
Saya setuju dengan Anda bahwa itu tidak jelas! Java menyebutnya replacedan replaceAll. Tapi Ruby berakar pada Perl yang menggunakan gpengubah. Itu hanya salah satu dari hal-hal itu.
Ray Toal
1
Untungnya, sekarang sudah jelas. Saya akan tahu di masa depan.
Ryanmt
Ngomong-ngomong, subjauh lebih cepat daripada gsub, ada patokan di sini github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu
Saya melihat beberapa perilaku yang berbeda untuk ini: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Adakah pemikiran mengapa gsub!hanya tampaknya hanya menemukan / mengganti contoh pertama saat menggunakan grup regex?
Bennett Talpers
31

Perbedaannya adalah bahwa subhanya menggantikan kemunculan pertama dari pola yang ditentukan, sedangkan gsubmelakukannya untuk semua kemunculan (yaitu, menggantikan secara global).

Chris Bunch
sumber
10
Jika Anda menjawab satu menit sebelumnya, mungkin 1020 perwakilan lagi akan menjadi milik Anda. :)
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                                # --- ---
deepak
sumber
-2

subdan gsubmelakukan penggantian masing-masing pertandingan pertama dan semua.

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"
GADI HEMANTHKUMAR
sumber