在ruby中的string转义单引号和双引号?
如何在string中转义单引号和双引号?
我想一起逃避单引号和双引号。 我知道如何分开传递他们,但不知道如何通过他们两个。
例如: str = "ruby 'on rails" " = ruby 'on rails"
我最喜欢的方式是不用担心转义和使用%q(它像一个单引号string)或%Q双引号string行为。
所以
str = %q[ruby 'on rails"] # Single quoting str2 = %Q[quoting with #{str}] # will insert variable
使用反斜线来转义字符
str = "ruby \'on rails\" "
你可以使用Qstring,它允许你使用任何你喜欢的分隔符:
str = %Q|ruby 'on rails" " = ruby 'on rails|
>> 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描述string的开始/结束。 在打开heredoc后在下一行开始string,然后在自己的行上再次使用delineator来结束string。
这完成了所有需要的转义,并转换为双引号string:
string => "I don't have to \"worry\" about escaping!!'\"!!\n"
我只会使用: str = %(ruby 'on rails ")
因为只是%
代表双引号(或者%Q)并且允许在string上插入variables。
一个警告:
使用%Q[]
和%q[]
进行string比较并不安全。
例如,如果你加载一些意思是空的东西,比如""
或''
,你需要使用实际的转义序列。 例如,假设qvar
等于""
而不是任何空string。
这将评估为false
if qvar == "%Q[]"
如此,
if qvar == %Q[]
虽然这将评估为true
if qvar == "\"\""
从另一个堆栈发送命令行variables到我的ruby脚本时遇到了这个问题。 只有加百列奥古斯托的答案为我工作。
以下是在更复杂的情况下如何使用%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