Qual é a diferença entre os métodos gsub e sub para Ruby Strings
111
Estive examinando a documentação de Stringhoje e vi o :submétodo, que nunca havia notado antes. Tenho usado :gsube parece que eles são essencialmente os mesmos. Alguém pode explicar a diferença para mim? Obrigado!
Sim. Eu entendo agora. Em minha defesa, não acho que isso fosse muito óbvio ... Até agora, claro.
Ryanmt de
15
Eu concordo com você que não é óbvio! Java os chama de replacee replaceAll. Mas Ruby tem suas raízes em Perl, que usa o gmodificador. É apenas uma daquelas coisas.
Estou vendo alguns comportamentos diferentes em relação a isso: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Alguma idéia de por que gsub!parece estar localizando / substituindo apenas a primeira instância ao usar grupos regex?
Bennett Talpers
31
A diferença é que subapenas substitui a primeira ocorrência do padrão especificado, enquanto o gsubfaz para todas as ocorrências (ou seja, ele substitui globalmente).
Se você tivesse respondido um minuto antes, talvez mais 1020 repetições seriam suas. :)
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 # --- ---
sube gsubrealizar a substituição da primeira e de todas as correspondências, 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"
Respostas:
O
g
significa global, como em substituir globalmente (todos):No irb:
fonte
replace
ereplaceAll
. Mas Ruby tem suas raízes em Perl, que usa og
modificador. É apenas uma daquelas coisas.sub
é muito mais rápido do quegsub
, há uma referência aqui github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by"
Alguma idéia de por quegsub!
parece estar localizando / substituindo apenas a primeira instância ao usar grupos regex?A diferença é que
sub
apenas substitui a primeira ocorrência do padrão especificado, enquanto ogsub
faz para todas as ocorrências (ou seja, ele substitui globalmente).fonte
fonte
sub
egsub
realizar a substituição da primeira e de todas as correspondências, respectivamente.fonte