많은 정규 표현식에 그룹화 괄호 문자처럼 tr
tr
의 첫 번째 인수 작동에서 탈출. 표현식의 처음에 ^
을 사용하여 일치하지 않는 항목을 대체하고 일치하지 않는 항목을 바꿀 수 있습니다. a-f
을 사용하여 일련의 문자를 찾습니다. 제어 문자가 있기 때문에 내부적으로 이스케이프 처리되기 때문에 -
및 ^
을 리터럴 문자로 사용할 수 있습니다. 작은 따옴표를 사용하는 경우 루비 따옴표 문자열
에서 탈출
print 'abcdef'.tr('b-e', 'x') # axxxxf
print 'abcdef'.tr('b\-e', 'x') # axcdxf
는 또한, 루비가 가능한 경우가 실제로 다른 백 슬래시 또는 단일 견적을 탈출하는 데 사용되지 않습니다 때, 즉를 백 슬래시를 포함하려고합니다.
# Single quotes
print '\\' # \
print '\d' # \d
print '\\d' # \d
print '\\\d' # \\d
# Double quotes
print "\\" # \
print "\d" # d
print "\\d" # \d
print "\\\d" # \d
예제는 마음에 모든 것을 함께
을 재 방문,의 다시 예를 살펴 보자. 첫 번째 백 슬래시 탈출 때문에
'\\'.tr('\\', 'x') #=> "x"
'\\'
정의 문자열 리터럴 스트링 \
된다. 거기에 놀라움이 없습니다.
'\\'.tr('\\d', 'x') #=> "\\"
'\\d'
정의 문자열 리터럴 스트링 \d
된다. tr
엔진은 리터럴 문자열의 백 슬래시를 사용하여 d
을 이스케이프 처리합니다. 결과 : d
의 인스턴스가 tr
으로 바뀝니다.
'\\'.tr('\\\d', 'x') #=> "x"
'\\\d'
정의 문자열 리터럴 \\d
된다. 먼저 \\
은 \
이됩니다. 그러면 \d
은 \d
이됩니다. 즉, 백 슬래시가 보존됩니다. 백 슬래시 또는 대체 문자열과 d
중 모든 문자를 대체 \\d
다음 tr
하게
리터럴 문자열 (이 특정 동작은 외로운 d
를 떠나, 백 슬래시 살아 먹을 것 두 문자열과는 다릅니다) .
흥미 롭습니다. 그리고 왜 '\\ rs'.tr ('\\ rs ','x ')'는'\\ xx'를 반환합니까?! 나는'xxx'의 반환 값을 기대했을 것입니다. 그리고 [documentation example] (http://ruby-doc.org/core/classes/String.html#M001199)에서 "hello".tr ('aeiou', '*')','*'는 더 짧습니다. 'aeiou'보다, 그래서 * to_str이 from_str보다 짧으면, 마지막 문자 * 을 의미하는 패딩이됩니까? 그게 버그 야? 비행 거리 야? 슈퍼맨인가요? : D – Zabba
@Zabba 그것은 "hello".tr ('aeiou', '* #')'는 "hello"와 동일하다는 것을 의미합니다.tr ('aeiou', '* ####')'. : D – sawa
'\\ d .tr ('\\ d', 'xx)'에서 어떤 출력을 기대할 수 있습니까 (아직 실행하지 마십시오.). 나는 그것이 * 제공하는 것을 기대하지 않는다 .. – Zabba