在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| 

这是一个完整的清单:

在这里输入图像说明

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

 >> 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