¿Cuál es la diferencia entre gsub y sub métodos para Ruby Strings?
111
He estado examinando la documentación de Stringhoy y vi el :submétodo, que nunca antes había notado. He estado usando :gsuby parece que son esencialmente lo mismo. ¿Alguien puede explicarme la diferencia? ¡Gracias!
Si. Entiendo ahora. En mi defensa, no creo que esto fuera muy obvio ... Hasta ahora, eso es.
Ryanmt
15
¡Estoy de acuerdo contigo en que no es obvio! Java los llama replacey replaceAll. Pero Ruby tiene sus raíces en Perl, que usa el gmodificador. Es solo una de esas cosas.
Ray Toal
1
Afortunadamente, ahora es obvio. Lo sabré en el futuro.
Veo un comportamiento diferente a esto: ¿ A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Alguna idea de por qué gsub!solo parece encontrar / reemplazar solo la primera instancia cuando se usan grupos de expresiones regulares?
Bennett Talpers
31
La diferencia es que subsolo reemplaza la primera ocurrencia del patrón especificado, mientras gsubque lo hace para todas las ocurrencias (es decir, reemplaza globalmente).
Si hubiera respondido un minuto antes, tal vez 1020 repeticiones más hubieran sido suyas. :)
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 # --- ---
suby gsubrealizar el reemplazo de la primera y todas las coincidencias respectivamente.
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"
Respuestas:
Las
gsiglas de global, como en reemplazar globalmente (todos):En irb:
fuente
replaceyreplaceAll. Pero Ruby tiene sus raíces en Perl, que usa elgmodificador. Es solo una de esas cosas.subes mucho más rápido quegsub, hay un punto de referencia aquí github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by"Alguna idea de por quégsub!solo parece encontrar / reemplazar solo la primera instancia cuando se usan grupos de expresiones regulares?La diferencia es que
subsolo reemplaza la primera ocurrencia del patrón especificado, mientrasgsubque lo hace para todas las ocurrencias (es decir, reemplaza globalmente).fuente
fuente
subygsubrealizar el reemplazo de la primera y todas las coincidencias respectivamente.fuente