【发布时间】:2011-10-06 01:35:16
【问题描述】:
如何在字符串中转义单引号和双引号?
我想一起转义单引号和双引号。我知道如何分别通过它们,但不知道如何通过它们。
例如:str = "ruby 'on rails" " = ruby 'on rails"
【问题讨论】:
如何在字符串中转义单引号和双引号?
我想一起转义单引号和双引号。我知道如何分别通过它们,但不知道如何通过它们。
例如: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。
【讨论】:
inspect它时才会显示转义。试试puts吧。
一个警告:
使用%Q[] 和%q[] 进行字符串比较在直觉上并不安全。
例如,如果您加载一些意在表示空的内容,例如"" 或'',您需要使用实际的转义序列。例如,假设 qvar 等于 "" 而不是任何空字符串。
这将评估为falseif qvar == "%Q[]"
同样,if qvar == %Q[]
虽然这将评估为 trueif qvar == "\"\""
我在将命令行变量从不同的堆栈发送到我的 ruby 脚本时遇到了这个问题。只有Gabriel Augusto's answer 为我工作。
【讨论】:
我只会使用:
str = %(ruby 'on rails ")
因为只有 % 代表双引号(或 %Q)并允许在字符串上插值。
【讨论】:
【讨论】:
如果我开始担心逃跑,我会选择heredoc。它会为您处理好:
string = <<MARKER
I don't have to "worry" about escaping!!'"!!
MARKER
MARKER 描述了字符串的开始/结束。打开heredoc后在下一行开始字符串,然后在它自己的行上再次使用delineator结束字符串。
这完成了所有需要的转义并转换为双引号字符串:
string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"
【讨论】:
这是一个如何在更复杂的场景中使用%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
【讨论】:
使用反斜杠转义字符
str = "ruby \'on rails\" "
【讨论】:
您可以使用 Q 字符串,它允许您使用任何您喜欢的分隔符:
str = %Q|ruby 'on rails" " = ruby 'on rails|
【讨论】:
>> str = "ruby 'on rails\" \" = ruby 'on rails"
=> "ruby 'on rails" " = ruby 'on rails"
【讨论】: