Ruby文字列のgsubメソッドとsubメソッドの違いは何ですか


回答:


208

gグローバルに置換(すべて)」の場合と同様に、スタンドはグローバルを表します。

IRBで:

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

13
うん。今、私は分かる。私の弁護では、これはそれほど明白ではなかったと思います...今までは、それがそうでした。
Ryanmt 2011

15
明白ではないことに同意します!Javaはこれらreplaceを呼び出しますreplaceAll。しかし、Rubyは、g修飾子を使用するPerlにルーツがあります。そのうちの1つにすぎません。
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

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

subそしてgsub、最初の一致とすべての一致の置換をそれぞれ実行します。

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.