Ruby Strings의 gsub 메서드와 sub 메서드의 차이점은 무엇입니까?


답변:


208

g전 세계적으로 (모든) 대체 같이 세계를 의미합니다 :

irb에서 :

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

13
네. 지금은 이해. 내 변호에 있어서는 이것이별로 명백하지 않다고 생각합니다. 지금까지는 그렇습니다.
Ryanmt 2011

15
나는 그것이 명백하지 않다는 것에 동의합니다! Java는 이러한 replacereplaceAll. 그러나 Ruby는 g수정자를 사용하는 Perl에 뿌리를두고 있습니다. 그 중 하나 일뿐입니다.
Ray Toal 2011

1
다행히 이제는 분명합니다. 나는 미래에 알게 될 것이다.
Ryanmt 2011

그런데, sub훨씬 빠르게보다 gsub벤치 마크 여기있다, github.com/JuanitoFatas/fast-ruby/blob/master/code/string/...
JackXu

이에 대한 몇 가지 다른 동작이 있습니다. 정규식 그룹을 사용할 때 첫 번째 인스턴스 만 찾고 / 바꾸는 것처럼 보이는 A, sentence, separated, by, commas".gsub!(/(.*),(.*)/,"\\2 \\1") => " commas A, sentence, separated, by" 이유가 gsub!있습니까?
Bennett Talpers

31

차이점은 sub지정된 패턴의 첫 번째 발생 만 대체하는 반면 gsub모든 발생에 대해 수행한다는 것입니다 (즉, 전체적으로 대체 됨).


10
1 분 전에 대답했다면 아마도 1020 회 이상이 될 것입니다. :)
Andrew Grimm 2015

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

subgsub각각 제 모든 일치 교환을 수행한다.

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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.