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

时间:2011-07-15 10:56:24

标签: ruby escaping

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

我想一起逃避单引号和双引号。我知道如何单独传递它们但不知道如何传递它们。

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

9 个答案:

答案 0 :(得分:76)

我首选的方法是不要担心转义,而是使用%q,其行为类似于单引号字符串(无插值或字符转义),或%Q表示双引号字符串行为:< / p>

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

答案 1 :(得分:28)

使用反斜杠转义字符

str = "ruby \'on rails\" "

答案 2 :(得分:19)

您可以使用允许您使用任何分隔符的Q字符串:

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

答案 3 :(得分:19)

以下是完整列表:

enter image description here

来自http://learnrubythehardway.org/book/ex10.html

答案 4 :(得分:7)

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

答案 5 :(得分: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"

答案 6 :(得分:5)

我会用: str = %(ruby 'on rails ") 因为只有%代表双引号(或%Q)并允许在字符串上插入变量。

答案 7 :(得分:1)

一个警告:

使用%Q[]%q[]进行字符串比较并非直观安全。

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

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

同样如此,
if qvar == %Q[]

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

当从不同的堆栈向我的ruby脚本发送命令行变量时,我遇到了这个问题。只有Gabriel Augusto's answer为我工作。

答案 8 :(得分: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