tr和gsub有什么不同?

我正在阅读Ruby文档,并对gsubtr之间的区别感到困惑。 两者有什么区别?

当你想要replace(翻译)单个字符时使用tr

tr匹配单个字符(不是通过正则expression式),因此字符不需要在第一个string参数中以相同的顺序出现。 当find一个字符时,它将被replace为在第二个string参数中的相同索引处find的字符:

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

当需要使用正则expression式或者当您想要replace较长的子string时使用gsub

 'abcde'.gsub(/bda/, '123') #=> "abcde" 'abcde'.gsub(/bd/, '123') #=> "a123e" 
  • tr只能用一个单一的固定字符replace单个字符(尽pipe你可以在单个tr调用中放置多个这种types的匹配),但速度很快。
  • gsub可以使用正则expression式来匹配复杂的模式,并且用一个复杂的计算结果代替,但是比tr慢。

tr返回str一个副本,其中from_str的字符被from_str的相应字符to_str 。 如果to_strfrom_str短,则用最后一个字符填充以保持对应关系。 http://apidock.com/ruby/String/tr

gsub返回str一个副本,其中所有出现的模式被第二个参数替代。 该模式通常是一个正则expression式; 如果以string的forms给出,它所包含的任何正则expression式元字符都将按字面解释,例如\d将匹配反斜杠后跟d ,而不是数字。 http://apidock.com/ruby/String/gsub