Я читал документацию Ruby и путался с разницей между gsub
и tr
. В чем разница между двумя?
В чем разница между tr и gsub?
Ответ 1
Используйте tr
, когда вы хотите заменить (перевести) одиночные символы.
tr
соответствует одиночным символам (не через регулярное выражение), поэтому символы не должны встречаться в том же порядке в первом аргументе строки. Когда символ найден, он заменяется символом, который находится в том же индексе во втором строковом аргументе:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
Используйте gsub
, когда вам нужно использовать регулярное выражение или если вы хотите заменить более длинные подстроки:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
Ответ 2
-
tr
может заменить только один символ одним фиксированным символом (хотя вы можете поместить несколько совпадений этого типа в один вызовtr
), но быстро. -
gsub
может соответствовать сложным шаблонам с использованием regex и заменять сложным результатом вычисления, но медленнее, чемtr
.
Ответ 3
tr
возвращает копию str
с символами в from_str
, замененными соответствующими символами в to_str
. Если to_str
короче from_str
, он заполняется его последним символом, чтобы поддерживать соответствие.
http://apidock.com/ruby/String/tr
gsub
возвращает копию str
со всеми вхождениями шаблона, заменяемыми вторым аргументом. Шаблон обычно представляет собой Regexp; если задано как String, любые метасимволы регулярного выражения, которые он содержит, будут интерпретироваться буквально, например. \d
будет соответствовать обратному результату, а затем d
вместо цифры.
http://apidock.com/ruby/String/gsub