lua-cjson解码反斜杠错误

我有一个关于反斜杠的问题。

local a = '{"hosts":[".*\\.?example(?:-bar)?.com"]}' local b = cjson.decode(a)

原始字符串为[[.*\.?example(?:-bar)?.com]]

它会得到在第14个字符处预期值但找到无效的转义代码的错误。我试图替换\\,但它不起作用。

我该如何解决这个问题?谢谢。

点赞
用户1695906
用户1695906

Lua的字符串字面量'\\'描述了一个单字符字符串'\'

JSON字符串"\\"编码一个单字符字符串'\'

手动编写JSON字符串时,需要将\转义成\。

将字符串作为Lua字符串字面量进行编写时,每个\变成\。

因此,\字符在JSON中为\,在Lua中的结果为\\。

我不确定它是否改变了正则表达式的含义。

它不会改变含义,因为在解码后,您应该发现_实际字符串_只包含一个\。

然而,作为最佳实践,请不要手动编写JSON字符串。创建一个表格并使用encode()函数将其序列化为JSON。这适用于任何语言。出于您在此示例中看到的原因以及其他原因,在此操作是有错误风险的。

您原始的实现无效,因为您的字符串包含裸 \,这不是有效的JSON。在JSON中,\始终后跟另一个\或几个\用于转义的东西,例如\r或\n。

2018-08-05 12:15:46