What is the difference between tr and gsub?

I was reading the Ruby documentation and got confused with the difference between gsub and tr. What is the difference between the two?

1

3 Answers

Use tr when you want to replace (translate) single characters.

tr matches on single characters (not via a regular expression), therefore the characters don't need to occur in the same order in the first string argument. When a character is found, it is replaced with the character that is found at the same index in the second string argument:

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

Use gsub when you need to use a regular expression or when you want to replace longer substrings:

'abcde'.gsub(/bda/, '123') #=> "abcde" 'abcde'.gsub(/b.d/, '123') #=> "a123e" 
1
  • tr can only replace a single character with a single fixed character (although you can put multiple matches of this sort in a single tr call) but is fast.
  • gsub can match complicated patterns using regex, and replace with a complicated computation result, but is slower than tr.
1

tr returns a copy of str with the characters in from_str replaced by the corresponding characters in to_str. If to_str is shorter than from_str, it is padded with its last character in order to maintain the correspondence.

gsub returns a copy of str with the all occurrences of pattern substituted for the second argument. The pattern is typically a Regexp; if given as a String, any regular expression metacharacters it contains will be interpreted literally, e.g. \d will match a backlash followed by d, instead of a digit.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like