Jaka jest różnica między metodami gsub i sub w Ruby Strings
111
Przeglądałem Stringdzisiaj dokumentację i zobaczyłem :submetodę, której nigdy wcześniej nie zauważyłem. Używałem :gsubi wydaje się, że są one zasadniczo takie same. Czy ktoś może mi wyjaśnić różnicę? Dzięki!
Tak. Teraz rozumiem. Na moją obronę, nie sądzę, żeby było to zbyt oczywiste ... To znaczy do tej pory.
Ryanmt
15
Zgadzam się z tobą, że to nie jest oczywiste! Java nazywa je replacei replaceAll. Ale Ruby ma swoje korzenie w Perlu, który używa gmodyfikatora. To tylko jedna z tych rzeczy.
Ray Toal,
1
Na szczęście jest to teraz oczywiste. Dowiem się w przyszłości.
Widzę różne zachowania: A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" Jakieś myśli, dlaczego gsub!wydaje się, że znajdowanie / zastępowanie tylko pierwszego wystąpienia podczas korzystania z grup wyrażeń regularnych?
Bennett Talpers
31
Różnica polega na tym, że subzastępuje tylko pierwsze wystąpienie określonego wzorca, podczas gdy gsubrobi to dla wszystkich wystąpień (to znaczy zastępuje globalnie).
Gdybyś odpowiedział minutę wcześniej, być może 1020 więcej przedstawicieli byłoby Twoje. :)
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 # --- ---
subi gsubwykonaj zastąpienie odpowiednio pierwszego i wszystkich dopasowań.
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"
Odpowiedzi:
g
Oznacza globalny, jak w wymieniać globalnie (wszystkie):W irb:
źródło
replace
ireplaceAll
. Ale Ruby ma swoje korzenie w Perlu, który używag
modyfikatora. To tylko jedna z tych rzeczy.sub
jest znacznie szybszy niżgsub
, jest tutaj benchmark github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by"
Jakieś myśli, dlaczegogsub!
wydaje się, że znajdowanie / zastępowanie tylko pierwszego wystąpienia podczas korzystania z grup wyrażeń regularnych?Różnica polega na tym, że
sub
zastępuje tylko pierwsze wystąpienie określonego wzorca, podczas gdygsub
robi to dla wszystkich wystąpień (to znaczy zastępuje globalnie).źródło
źródło
sub
igsub
wykonaj zastąpienie odpowiednio pierwszego i wszystkich dopasowań.źródło