ruby - 如何转义 Ruby 中的单引号?

标签 ruby string escaping

我正在通过接受 JSON 作为字符串的脚本(不是我的)将一些 JSON 传递给服务器。

JSON 的某些内容包含单引号,因此我想确保在将任何单引号传递给脚本之前对其进行转义。

我尝试了以下方法:

> irb
> 1.9.3p194 :001 > x = "that's an awesome string"
>  => "that's an awesome string" 
> 1.9.3p194 :002 > x.sub("'", "\'")
>  => "that's an awesome string" 
> 1.9.3p194 :003 > x.sub("'", "\\'")
>  => "thats an awesome strings an awesome string"

但似乎无法获得正确的语法。

最佳答案

sub("'", "\'") 不起作用的原因是因为 "\'""'"。在双引号内,转义单引号是可选的。

sub("'", "\\'") 不起作用的原因是 "\\'" 扩展为反斜杠后跟单引号.在 subgsub 参数中,后跟一些字符的反斜杠具有与相应的全局变量相当的特殊含义。特别是在这种情况下,全局变量 $' 保存最后一个匹配点之后的子字符串。 subgsub 参数位置中的 "\\'" 指的是类似的东西。为了避免这种特殊约定,您应该将替换字符串放在 block 中而不是参数中,并且由于您不仅要匹配一个,所以应该使用 gsub 而不是 sub:

gsub("'"){"\\'"}

关于ruby - 如何转义 Ruby 中的单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700218/

相关文章:

Ruby:实例变量与局部变量

java - 如何确定字符串列表是否包含 null 或空元素

javascript - 如何在 JavaScript 中删除字符串中的重复单词?

Java正则表达式匹配元组

sql - 如何在 Oracle 动态 SQL 中转义 ":"并且还有绑定(bind)变量?

ruby-on-rails - 在 RSpec 中,在 :all block 之前使用 let 变量

Ruby:无法使用 Libxml-ruby 保存文档

MySQL 与斜杠匹配

java - 为什么 ";"和 "\\;"找到相同的结果?

ruby-on-rails - Ruby CSV 文件解析,标题不会格式化?