2011-07-15 12 views

Odpowiedz

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

Można używać łańcuchów Q, które pozwalają na użycie dowolnego ogranicznika lubisz:

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

mam pasek wyszukiwania i analizowany ten „sdasd” „FSD” i jej daje mi = Q | sdasd” – Aleem

+0

Wszelkie docs odniesienia – Numbers

65

Mój preferowanym sposobem jest nie martwić się o ucieczce i używając% q (który zachowuje się jak pojedynczy cytowany ciąg) lub% Q dla podwójnego cudzysłowu.

tak

str = %q[ruby 'on rails"] # Single quoting 
str2 = %Q[quoting with #{str}] # will insert variable 
+0

Daje cytowanie z Ruby na szynach \”, i nie wymagają dodatkowego \ – Aleem

+6

? Uciekanie jest pokazywane tylko wtedy, gdy je "sprawdzisz". Spróbuj "umieścić" zamiast tego. – Yossi

24

Zastosowanie backslash ucieczki znaków

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

Oto przykład jak używać %Q[] w bardziej skomplikowanym scenariuszu:

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

pójdę z a heredoc, jeśli zaczynam się martwić o ucieczkę. Zajmie się tym za Ciebie:

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

MARKER określa początek/koniec ciągu znaków. uruchom łańcuch w następnym wierszu po otwarciu heredoc, a następnie zakończ ciąg za pomocą kreatora ponownie na jego własnej linii.

To robi wszystko Uciekająca potrzebne i konwertuje do podwójnym cudzysłowie:

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

Należy zauważyć, że heredoc jest niezdarnym sposobem cytowania małych ciągów. To pytanie wymaga meta-odpowiedzi, która zawiera wszystkie opcje cytowania wraz z ich zaletami i wadami. –

+0

To prawda, Mark. Powinienem był zauważyć, że używanie ich na małych strunach jest obrzydliwe. – jbarr

3

chciałbym używać tylko : str = %(ruby 'on rails ") Bo tylko % oznacza podwójne cudzysłowy (lub% Q) i umożliwia interpolację zmiennych w łańcuchu.

1

Jedno zastrzeżenie:

Korzystanie %Q[] i %q[] porównań ciąg nie jest intuicyjnie bezpieczne.

Na przykład, jeśli załadujesz coś oznaczającego oznaczenie czegoś pustego, na przykład "" lub '', musisz użyć rzeczywistych sekwencji escape. Na przykład, powiedzmy, qvar równa się "" zamiast dowolnego pustego łańcucha.

Ten oceni do false
if qvar == "%Q[]"

jak to będzie,
if qvar == %Q[]

Chociaż oceni do true
if qvar == "\"\""

wpadłem na ten problem podczas wysyłania wiersza polecenia vars z innego stosu do mojego skryptu ruby. Pracował dla mnie tylko Gabriel Augusto's answer.

Powiązane problemy