如何在字符串中转义单引号和双引号?
我想将单引号和双引号一起转义。我知道如何分别通过它们,但不知道如何同时通过它们。
例如: str = "ruby 'on rails" " = ruby 'on rails"
Answers:
我的首选方式是不用担心转义,而使用%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
。
inspect
。试试puts
吧。
如果我开始担心转义,我会选择heredoc。它将为您解决:
string = <<MARKER
I don't have to "worry" about escaping!!'"!!
MARKER
MARKER描绘了字符串的开始/结束。在打开heredoc之后,在下一行开始字符串,然后在其自己的行上再次使用定界符结束字符串。
这完成了所有所需的转义,并转换为双引号字符串:
string
=> "I don't have to \"worry\" about escaping!!'\"!!\n"
我会用:
str = %(ruby 'on rails ")
因为%
只代表双引号(或%Q),并允许对字符串中的变量进行插值。
一个警告:
使用%Q[]
和%q[]
比较字符串在直观上并不安全。
例如,如果您加载的内容表示空白,例如""
或''
,则需要使用实际的转义序列。例如,假设qvar
等于,""
而不是任何空字符串。
这将评估为 false
if qvar == "%Q[]"
这样,
if qvar == %Q[]
虽然这将评估为 true
if qvar == "\"\""
从另一个堆栈向我的ruby脚本发送命令行var时遇到了这个问题。只有加布里埃尔·奥古斯托的回答对我有用。