tr과 gsub의 차이점은 무엇입니까?


133

나는 루비 설명서를 읽고 있었다과의 차이와 혼동있어 gsub하고 tr. 둘의 차이점은 무엇입니까?


8
RuboCop이 gsub 사용에 대해 경고했기 때문에이 질문을 찾았습니다. 아래 답변이 대답을 잘 설명한다고 생각합니다. 기본적으로 gsub와 tr의 차이점은 무엇입니까?
JohnK

답변:


180

tr단일 문자를 바꾸고 자 할 때 사용하십시오 .

tr정규 표현식을 통하지 않고 단일 문자 와 일치 하므로 문자는 첫 번째 문자열 인수에서 동일한 순서로 나타날 필요가 없습니다. 문자가 발견되면 두 번째 문자열 인수에서 동일한 색인에있는 문자로 대체됩니다.

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

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

사용 gsub정규 표현식을 사용 할 때 또는 더 긴 문자열을 교체 할 때 :

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

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

48
문맥의 비트 : 이름 tr은 "문자 번역"에서와 같이 "번역"을 의미합니다. 그것은 같은 이름의 유닉스 유틸리티의 이름을 따서 명명되었습니다 (명백하고 짧은 이름으로 잘 알려져 있음).
Martin Tournoij

40
  • tr단일 문자를 단일 고정 문자로만 대체 할 수 있지만 (단일 tr호출 에 이러한 종류의 여러 일치 항목을 넣을 수는 있지만) 빠릅니다.
  • gsub정규 표현식을 사용하여 복잡한 패턴을 일치시키고 복잡한 계산 결과로 대체 할 수 있지만보다 느립니다 tr.

9
맞습니다. 두 작품 모두 tr보다 몇 배 빠릅니다 gsub. 여기에 얼마나 빨리에 벤치 마크 tr보다 수는 gsub. github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
JackXu

9

trstr의 문자가에서 from_str의 해당 문자로 교체 된 사본을 반환합니다 to_str. 경우 to_str보다 짧은 from_str, 그것은 대응 관계를 유지하기 위해 마지막 문자로 채워집니다. http://apidock.com/ruby/String/tr

gsubstr두 번째 인수로 대체 된 모든 패턴이 있는 사본을 리턴합니다 . 패턴은 일반적으로 Regexp입니다. 문자열로 주어지면, 포함 된 정규 표현식 메타 문자는 문자 그대로 해석 \d됩니다 . 예를 들어 d숫자 대신 백래시와 일치합니다 . http://apidock.com/ruby/String/gsub

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.