我对反斜杠有疑问。
local a = '{"hosts":[".*\\.?example(?:-bar)?.com"]}'
local b = cjson.decode(a)
原始字符串为[[.*\.?example(?:-bar)?.com]]
。
它将出现Expected value but found invalid escape code at character 14
错误。我试图替换\\
,但不起作用。
如何解决此问题?谢谢。
答案 0 :(得分:0)
Lua字符串文字'\\'
描述了一个单字符字符串'\'
。
JSON字符串"\\"
编码一个字符的字符串'\'
。
要手动编写JSON字符串,\将转义为\。
要将字符串写为Lua字符串文字,每个\都变成\。
因此,JSON的字符\是\,而Lua的结果是\\。
我不确定它是否会改变正则表达式的含义。
它不会改变含义,因为您应该发现实际字符串在解码后仅包含一个\。
但是,作为最佳实践,请勿手动编写JSON字符串。创建一个表,然后使用encode()
函数将其序列化为JSON。这适用于任何语言。由于您在本示例中看到的原因,它很容易出错。
您的原始实现无效,因为您的字符串包含一个裸\,它不是有效的JSON。在JSON中,\总是跟在另一个\或\用来转义的少数事物之一,例如\ r或\ n。