[RUBY-ON-RAILS] 왜 문자열 # GSUB 이중 컨텐츠를합니까?
RUBY-ON-RAILS왜 문자열 # GSUB 이중 컨텐츠를합니까?
s = "#main= 'quotes'
s.gsub "'", "\\'" # => "#main= quotes'quotes"
이것은 잘못된 것 같다, 나는 "# 주 = \\ '따옴표를 \\'"을 기대할
내가 이스케이프 문자를 사용하지 않는 경우, 다음은 예상대로 작동합니다.
s.gsub "'", "*" # => "#main= *quotes*"
그래서 탈출 함께 할 수있는 뭔가가 있어야합니다.
루비 1.9.2p290 사용
나는 백 슬래시와 따옴표와 작은 따옴표를 교체해야합니다.
더욱 불일치 :
"\\'".length # => 2
"\\*".length # => 2
# As expected
"'".gsub("'", "\\*").length # => 2
"'a'".gsub("'", "\\*") # => "\\*a\\*" (length==5)
# WTF next:
"'".gsub("'", "\\'").length # => 0
# Doubling the content?
"'a'".gsub("'", "\\'") # => "a'a" (length==3)
무슨 일이야?
해결법
-
==============================
1.당신은 정규 표현식 대체 문자열 내부의 \의 특별 함 '에 의해 넘어지고있어 :
당신은 정규 표현식 대체 문자열 내부의 \의 특별 함 '에 의해 넘어지고있어 :
그래서 당신은 '\\ 이중이 하나의 백 슬래시되고 결과가 \하지만 그 수단 "\\"'말할 때 "마지막으로 성공한 일치의 오른쪽에있는 문자열입니다." 당신이 탈출 따옴표와 작은 따옴표를 교체하려는 경우, 당신은 '\의 특별 함을 과거이게 더 탈출해야합니다
s.gsub("'", "\\\\'")
또는 이쑤시개를 방지하고 블록 양식을 사용 :
s.gsub("'") { |m| '\\' + m }
당신이 역 따옴표, 더하기 기호, 또는 한 자리를 탈출하려고한다면 당신은 유사한 문제로 실행됩니다.
여기에 전체 교훈은 아무것도 GSUB의 블록 형태하지만 대체의 가장 사소한를 선호하는 것입니다.
-
==============================
2.
s = "#main = 'quotes' s.gsub "'", "\\\\'"
이후 \ 그건 \\ 상응하는 당신이 사람의 네 가지를 넣어 가지고 이중 백 슬래시를 얻으려면.
-
==============================
3.당신은뿐만 아니라 \를 탈출해야합니다
당신은뿐만 아니라 \를 탈출해야합니다
s.gsub "'", "\\\\'"
출력
"#main= \\'quotes\\'"
좋은 설명은 외부 포럼에서 발견 :
출처
from https://stackoverflow.com/questions/7074337/why-does-stringgsub-double-content by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 3.1.0 ActionView :: 템플릿 :: 오류 (application.css가 미리 컴파일되지 않음) 레일 (0) | 2020.02.10 |
---|---|
[RUBY-ON-RAILS] 랙 미들웨어는 무엇입니까? (0) | 2020.02.10 |
[RUBY-ON-RAILS] 어떻게 첫 번째 모델에 속하는 다른 모델의 특성을 기반으로 모델을 쿼리하는? (0) | 2020.02.10 |
[RUBY-ON-RAILS] 지도 무엇을 않습니다 (: name)이 루비 코드에서 무엇입니까? (0) | 2020.02.10 |
[RUBY-ON-RAILS] 어떻게 루비 / 말대꾸 내부 변수를 레일 사용할 수 있습니까? (0) | 2020.02.10 |