Quelle est la différence entre les méthodes gsub et sub pour Ruby Strings


Réponses:


208

Le gsignifie global, comme dans replace globalement (all):

En irb:

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

13
Ouais. Je comprends maintenant. Pour ma défense, je ne pense pas que c'était très évident ... Jusqu'à présent, c'est vrai.
Ryanmt

15
Je suis d'accord avec vous que ce n'est pas évident! Java les appelle replaceet replaceAll. Mais Ruby a ses racines en Perl qui utilise le gmodificateur. C'est juste une de ces choses.
Ray Toal

1
Heureusement, c'est maintenant évident. Je le saurai dans le futur.
Ryanmt

Au fait, subc'est beaucoup plus rapide que gsub, il y a un benchmark ici github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

Je vois un comportement différent à ceci: des A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" pensées pourquoi gsub!ne semble trouver / remplacer que la première instance lors de l'utilisation de groupes de regex?
Bennett Talpers

31

La différence est que subne remplace que la première occurrence du modèle spécifié, alors gsubqu'il le fait pour toutes les occurrences (c'est-à-dire qu'il remplace globalement).


10
Si vous aviez répondu une minute plus tôt, peut-être 1020 représentants de plus auraient été à vous. :)
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                                # --- ---

-2

subet gsubeffectuer le remplacement du premier et de tous les matches respectivement.

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.