Ruby regexp不适用于双引号字符串?

时间:2015-11-09 22:13:22

标签: ruby

regexp = /(?:status\\\":)(\d*)(?:\,)/
string = '\n{\"status\":80,\"message\":\"Test message\"}\n'
result = string.scan(regexp)[0]
puts result

为什么这样做,但如果我这样做

regexp = /(?:status\\\":)(\d*)(?:\,)/
string = "\n{\"status\":80,\"message\":\"Test message\"}\n"
result = string.scan(regexp)[0]
puts result

我没有结果?我正在搜索的字符串是从Mechanize正文结果中复制的。我正在尝试对机械化页面对象的直接结果使用相同的正则表达式,并且没有显示匹配,我假设出于同样的原因发生了这个问题。

2 个答案:

答案 0 :(得分:2)

这里的问题是'\n'"\n"不是一回事:

'\n'
#=> "\\n" literal-backslash n

"\n"
# => "\n" newline character

如果需要反斜杠代码,则需要双引号字符串。

如果您的字符串中使用了这两种类型并且您不想逃避它们,请不要忘记%q[...]%Q[...]之类的内容作为使用引号的替代方法。

答案 1 :(得分:1)

您想要使用JSON:

JSON.parse(string)['status']
#=> 80