trとgsubの違いは何ですか?


133

私はRubyのドキュメントを読んでいたとの違いと混同しまったgsubtr。2つの違いは何ですか?


8
私がこの質問を見つけたのは、RuboCopが私のgsubの使用について警告したからです-以下の回答は答えをうまく説明していると思います。これは基本的にgsubとtrの違いです。
JohnK、2015年

回答:


180

tr単一の文字を置換(翻訳)する場合に使用します。

tr(正規表現を介さずに)単一の文字に一致するため、最初の文字列引数で文字が同じ順序で出現する必要はありません。文字が見つかると、2番目の文字列引数の同じインデックスにある文字に置き換えられます。

'abcde'.tr('bda', '123')
#=> "31c2e"

'abcde'.tr('bcd', '123')
#=> "a123e"

gsub正規表現を使用する必要がある場合、またはより長い部分文字列を置換する場合に使用します。

'abcde'.gsub(/bda/, '123')
#=> "abcde"

'abcde'.gsub(/b.d/, '123')
#=> "a123e"

48
コンテキストのビット:tr「文字を変換する」のように、名前は「変換する」を意味します。これはまさにそれが行うことです。同じ名前のUnixユーティリティ(あいまいで短い名前でよく知られている)にちなんで名付けられました。
Martin Tournoij 2016年

40
  • tr単一の文字を単一の固定文字に置き換えることしかできません(ただし、この種類の複数の一致を1回のtr呼び出しで配置できます)が高速です。
  • gsubは正規表現を使用して複雑なパターンに一致させ、複雑な計算結果に置き換えることができますが、よりも低速ですtr

9
その権利。両方が動作するときtrは、数倍高速ですgsub。これは、どれほど速くtrなるかに関するベンチマークですgsubgithub.com/JuanitoFatas/fast-ruby/blob/master/code/string/...
JackXu

9

trstrの文字をfrom_strの対応する文字に置き換えたのコピーを返しますto_strto_strがより小さい場合from_str、対応を維持するために最後の文字が埋め込まれます。 http://apidock.com/ruby/String/tr

gsubコピーを返します。str第二引数の代わりに、パターンのすべての出現で。パターンは通常、正規表現です。文字列として指定された場合、それに含まれる正規表現のメタ文字は文字どおりに解釈\dされdます。 http://apidock.com/ruby/String/gsub

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.