在Ruby中的字符串中转义单引号和双引号?


69

如何在字符串中转义单引号和双引号?

我想将单引号和双引号一起转义。我知道如何分别通过它们,但不知道如何同时通过它们。

例如: str = "ruby 'on rails" " = ruby 'on rails"

Answers:


84

我的首选方式是不用担心转义,而使用%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/zh-CN/trunk/syntax/literals_rdoc.html#label-Strings并搜索% strings


它给出了用ruby'on rails'报价,我不需要额外的\
Aleem

8
转义仅在您显示时显示inspect。试试puts吧。
Yossi

1
对于字符串变量,请用双引号引起来:value.gsub('“','\”')
Laszlo



19

您可以使用Q字符串,使您可以使用自己喜欢的任何定界符:

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

我有搜索栏,并解析了这个“ sdasd”“ fsd”,它给了我= Q | sdasd”
Aleem


7

如果我开始担心转义,我会选择heredoc。它将为您解决:

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

MARKER描绘了字符串的开始/结束。在打开heredoc之后,在下一行开始字符串,然后在其自己的行上再次使用定界符结束字符串。

这完成了所有所需的转义,并转换为双引号字符串:

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

请注意,heredoc是引用小字符串的笨拙方式。这个问题需要一个元答案,其中列出了所有引用选项以及它们的优缺点。
马克·托马斯

是的,马克。我应该注意到,在小字符串上使用它们是很麻烦的。
jbarr 2014年


1

一个警告:

使用%Q[]%q[]比较字符串在直观上并不安全。

例如,如果您加载的内容表示空白,例如""'',则需要使用实际的转义序列。例如,假设qvar等于,""而不是任何空字符串。

这将评估为 false
if qvar == "%Q[]"

这样,
if qvar == %Q[]

虽然这将评估为 true
if qvar == "\"\""

从另一个堆栈向我的ruby脚本发送命令行var时遇到了这个问题。只有加布里埃尔·奥古斯托的回答对我有用


0

这是一个如何%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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.