如何将带有特殊字符的字符串转换为实际的特殊字符?
例如,如果我有这个:
s = "hello\\nworld"
puts
的输出自然是这个:
> puts s
hello\nworld
但是我如何将其转换为这个?
hello
world
换句话说,有没有对反斜杠字符进行转义的功能?
您最好的选择是进行一些字符串替换。
s = "hello\\nworld"
puts s.gsub("\\n", "\n")
# >> hello
# >> world
此方法的缺点是,您必须显式列出/处理需要取消转义的所有特殊字符。
您通过\
内插\\
,使用一个反斜杠而不是两个:
s = "hello\nworld"
puts s
#=> hello
world
如果您的字符串来自受信任的来源,则可以使用eval
:
s = "hello\\nworld"
eval("\"#{s}\"") # => "hello\nworld"
注意,这允许任意代码执行:
s = "\"; loop { }; \""
eval("\"#{s}\"") # => infinite loop
而且这对于s = "\""
之类的输入也不起作用。