В чем разница между методами gsub и sub для строк Ruby
111
Я просматривал документацию на Stringсегодня и увидел :subметод, которого никогда раньше не замечал. Я использую, :gsubи похоже, что они по сути одинаковы. Может ли кто-нибудь объяснить мне разницу? Спасибо!
Да. Теперь я понимаю. В свое оправдание я не думаю, что это было очень очевидно ... До сих пор.
Ryanmt
15
Я согласен с вами, что это не очевидно! Java называет их replaceи replaceAll. Но у Ruby есть корни в Perl, который использует gмодификатор. Это просто одна из тех вещей.
Ray Toal
1
К счастью, теперь это очевидно. Я узнаю в будущем.
Я вижу различное поведение по отношению к этому: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" какие-либо мысли, почему, gsub!кажется, находит / заменяет только первый экземпляр при использовании групп регулярных выражений?
Bennett Talpers
31
Разница в том, что subзаменяет только первое вхождение указанного шаблона, тогда gsubкак заменяет все вхождения (то есть заменяет глобально).
Если бы вы ответили на минуту раньше, возможно, у вас было бы еще 1020 повторений. :)
Эндрю Гримм
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 # --- ---
subи gsubпроизвести замену первого и всех совпадений соответственно.
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"
Ответы:
Это
g
означает global, как в replace global (all):В irb:
источник
replace
иreplaceAll
. Но у Ruby есть корни в Perl, который используетg
модификатор. Это просто одна из тех вещей.sub
намного быстрее, чемgsub
, здесь есть тест github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by"
какие-либо мысли, почему,gsub!
кажется, находит / заменяет только первый экземпляр при использовании групп регулярных выражений?Разница в том, что
sub
заменяет только первое вхождение указанного шаблона, тогдаgsub
как заменяет все вхождения (то есть заменяет глобально).источник
источник
sub
иgsub
произвести замену первого и всех совпадений соответственно.источник