Development Tip

루비의 문자열에서 작은 따옴표와 큰 따옴표를 이스케이프합니까?

yourdevel 2020. 11. 16. 22:18
반응형

루비의 문자열에서 작은 따옴표와 큰 따옴표를 이스케이프합니까?


문자열에서 작은 따옴표와 큰 따옴표를 어떻게 이스케이프 할 수 있습니까?

작은 따옴표와 큰 따옴표를 함께 이스케이프하고 싶습니다. 나는 그들을 개별적으로 통과하는 방법을 알고 있지만 둘 다 통과하는 방법을 모릅니다.

예 : str = "ruby 'on rails" " = ruby 'on rails"


내가 선호하는 방법은 이스케이프에 대해 걱정하지 않고 대신 %q작은 따옴표 문자열 (보간 또는 문자 이스케이프 없음)처럼 작동하거나 %Q큰 따옴표로 묶인 문자열 동작을 사용하는 것입니다.

str = %q[ruby 'on rails" ] # like single-quoting
str2 = %Q[quoting with #{str}] # like double-quoting: will insert variable

참조 https://docs.ruby-lang.org/en/trunk/syntax/literals_rdoc.html#label-Strings을 검색하십시오 % strings.


백 슬래시를 사용하여 문자 이스케이프

str = "ruby \'on rails\" "

원하는 구분 기호를 사용할 수있는 Q 문자열을 사용할 수 있습니다.

str = %Q|ruby 'on rails" " = ruby 'on rails|

다음은 전체 목록입니다.

여기에 이미지 설명 입력

에서 http://learnrubythehardway.org/book/ex10.html


>> str = "ruby 'on rails\" \" = ruby 'on rails"
=> "ruby 'on rails" " = ruby 'on rails"

탈출에 대해 걱정하기 시작 하면 heredoc 과 함께 갈 것입니다 . 다음과 같이 처리됩니다.

string = <<MARKER 
I don't have to "worry" about escaping!!'"!!
MARKER

MARKER는 문자열의 시작 / 끝을 나타냅니다. heredoc을 연 후 다음 줄에서 문자열을 시작한 다음 해당 줄에서 다시 구분자를 사용하여 문자열을 끝냅니다.

이것은 필요한 모든 이스케이프를 수행하고 큰 따옴표로 묶인 문자열로 변환합니다.

string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"

난 그냥 사용합니다 : str = %(ruby 'on rails ") 그냥 있기 때문에 %큰 따옴표 (또는 % Q)의 약자 문자열에 변수의 보간을 할 수 있습니다.


한 가지주의 사항 :

사용 %Q[]하고 %q[]문자열 비교를하는 것은 직관적으로 안전하지 않습니다.

이 같은 빈 무언가를 의미하는 의미가 무엇인가를로드하는 경우 예를 들어, ""또는 '', 당신은 실제 이스케이프 시퀀스를 사용해야합니다. 예를 들어, 빈 문자열 대신 qvar같음을 가정 해 보겠습니다 "".

이것은 평가할 것입니다 false
if qvar == "%Q[]"

이것처럼
if qvar == %Q[]

이것이 평가되는 동안 true
if qvar == "\"\""

다른 스택의 명령 줄 변수를 Ruby 스크립트로 보낼 때이 문제가 발생했습니다. Gabriel Augusto의 답변이 저에게 효과적 이었습니다.


다음은 %Q[]더 복잡한 시나리오에서 사용하는 방법의 예입니다 .

  %Q[
    <meta property="og:title" content="#{@title}" />
    <meta property="og:description" content="#{@fullname}'s profile. #{@fullname}'s location, ranking, outcomes, and more." />
  ].html_safe

참고 URL : https://stackoverflow.com/questions/6705982/escaping-single-and-double-quotes-in-a-string-in-ruby

반응형