В чем разница между методами gsub и sub для Ruby Strings

Я просматривал документацию для String сегодня, и я видел метод :sub, о котором я никогда не замечал раньше. Я использовал :gsub, и кажется, что они по сути одинаковы. Может ли кто-нибудь объяснить мне разницу? Спасибо!

Ответ 1

g обозначает глобальное значение, как и в глобальном (все):

В irb:

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

Ответ 2

Разница в том, что sub заменяет только первое вхождение указанного шаблона, тогда как gsub делает это для всех вхождений (т.е. заменяет глобально).

Ответ 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                                # --- ---