¿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
g
siglas de global, como en reemplazar globalmente (todos):En irb:
fuente
replace
yreplaceAll
. Pero Ruby tiene sus raíces en Perl, que usa elg
modificador. Es solo una de esas cosas.sub
es 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
sub
solo reemplaza la primera ocurrencia del patrón especificado, mientrasgsub
que lo hace para todas las ocurrencias (es decir, reemplaza globalmente).fuente
fuente
sub
ygsub
realizar el reemplazo de la primera y todas las coincidencias respectivamente.fuente