我想在一些Ruby中插入以下内容作为变量的值:
`~!@#$%^&*()_-+={}|[]\:";'<>?,./
Run Code Online (Sandbox Code Playgroud)
用双引号括起来不行,所以有一个很好的escape_until_the_end可用的东西吗?
Jam*_*ker 14
不要使用多种方法 - 保持简单.
逃避#,反斜杠和双引号.
irb(main):001:0> foo = "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
=> "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想转义#(双引号字符串中变量的替换字符),请使用和转义单引号:
irb(main):002:0> foo = '`~!@#$%^&*()_-+={}|[]\\:";\'<>?,./'
=> "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
Run Code Online (Sandbox Code Playgroud)
%q非常适用于许多其他不包含每个ascii标点字符的字符串.:)
%q(text without parens)
%q{text without braces}
%Q[text without brackets with #{foo} substitution]
Run Code Online (Sandbox Code Playgroud)
编辑:显然你也可以成功地在%q()里面使用平衡的parens,但是从维护的角度来看,我认为这有点危险,因为那里没有语义暗示你总是必须在字符串中平衡你的parens .
首先,除非我疯了,否则%q() 确实很好,因为内括号是平衡的:
>> weird = %q(`~!@#$%^&*()_-+={}|[]\:";'<>?,./)
=> "`~!@\#$%^&*()_-+={}|[]\\:";'<>?,./"
>> puts weird
`~!@#$%^&*()_-+={}|[]\:";'<>?,./
Run Code Online (Sandbox Code Playgroud)
作为旁注:在使用时%q,您始终拥有使用空格作为分隔符的核选项.这是犯规,正式是一个坏主意,但它的确有效.
再说一次,我不会这样做,只是为了看...
>> weird = %q `~!@#$%^&*()_-+={}|[]\:";'<>?,./
=> "`~!@\#$%^&*()_-+={}|[]\\:";'<>?,./"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18503 次 |
| 最近记录: |