Qual è la differenza tra gsub e sub metodi per Ruby Strings


Risposte:


208

L' gacronimo di Global, come in sostituzione a livello mondiale (tutto):

In irb:

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

13
Si. Ora capisco. A mia difesa, non credo che questo fosse molto ovvio ... Fino ad ora, cioè.
Ryanmt

15
Sono d'accordo con te che non è scontato! Java chiama questi replacee replaceAll. Ma Ruby ha le sue radici in Perl che usa il gmodificatore. È solo una di quelle cose.
Ray Toal

1
Fortunatamente, ora è ovvio. Lo saprò in futuro.
Ryanmt

A proposito, subè molto più veloce di gsub, c'è un benchmark qui github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

Vedo un comportamento diverso da questo: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Qualche idea sul perché gsub!sembra solo trovare / sostituire solo la prima istanza quando si usano i gruppi regex?
Bennett Talpers

31

La differenza è che subsostituisce solo la prima occorrenza del pattern specificato, mentre lo gsubfa per tutte le occorrenze (ovvero, sostituisce globalmente).


10
Se avessi risposto un minuto prima, forse 1020 rappresentanti in più sarebbero stati tuoi. :)
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

subed gsubeseguire la sostituzione rispettivamente della prima e di tutte le partite.

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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.