Ruby字符串的gsub和sub方法有什么区别


Answers:


208

g代表全球,在全球(全部)取代:

在irb中:

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

13
是的 我现在知道了。在我的辩护中,我认为这不是很明显……直到现在。
Ryanmt

15
我同意你的看法,这并不明显!Java将这些称为replacereplaceAll。但是Ruby起源于使用g修饰符的Perl 。这只是其中之一。
雷·托尔

1
幸运的是,现在很明显。我以后会知道的。
Ryanmt

顺便说一句,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 '18

31

区别在于,sub仅替换指定模式的第一个匹配项,而gsub对所有匹配项都替换(即,全局替换)。


10
如果您在一分钟前回答,那么您可能会再增加1020个代表。:)
安德鲁·格林

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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.