【问题标题】:Error in string.gsub with backslashstring.gsub 中带有反斜杠的错误
【发布时间】:2011-06-27 00:38:23
【问题描述】:
local a = "te\st"
local b = string.gsub(a,'\','\\\\')
assert(false,b)

我做错了什么?

当我执行assert 时,我希望将字符串te\st 打印到屏幕上...但它不起作用

我有一个 JSON 文件,我想将它解码成 Lua 表。我不需要打印任何内容,我做了assert 只是为了测试本地问题。

所以我需要将所有数据保存在具有'\' 的 JSON 文件中。

【问题讨论】:

  • 我假设如果我解决了那个小例子,我将能够对 JSON 部分使用相同的解决方案
  • 请说明b 中的内容以及您期望/希望得到什么结果以获得更好的答案
  • 介意更好地解释您的问题/使用更多代码包括 json 部分吗?

标签: lua gsub


【解决方案1】:

如果您不希望反斜杠具有特殊含义,请使用 [[]] 而不是 ""''

阅读文字字符串in the manual

【讨论】:

  • 嗨,这可能是解决方案。我得到 JSON 格式的字符串。我想保留所有具有“\”的数据。所以我宁愿不在 JSON 代码中添加 [[]] 。我宁愿从 lua 处理它
  • 在 Lua 中,反斜杠 only 在字符串文字中具有特殊含义(即在您直接在代码中键入的字符串中)。如果您的数据采用“JSON 格式”,则其中的反斜杠可能会被您用来加载 JSON 的任何 Lua 库的 JSON 规则解释。很难说,因为你没有提供足够的细节。
【解决方案2】:

您是否尝试过使用% 字符而不是\ 来转义它

我不知道这是否会有所帮助,但我有一段时间让 Lua 的 gsub 匹配我的字符串与我想要从字面上处理的特殊字符......结果证明,而不是使用\ 作为转义字符或加倍字符,我需要在特殊字符前加上 % 前缀,以使其按字面意思对待。

【讨论】:

  • 是的,根据您使用的 LUA 版本,它将接受 \ 和 % 作为转义字符(旧版本)或仅接受 %(新版本)
【解决方案3】:

您的问题不太清楚,所以我不能 100% 确定您的意思。您的意思是当 b 等于字符串“te\st”时,您希望触发断言?如果是这样,您可以做一个简单的:

assert(b ~= "te\st")

或者我想...

assert(b ~= a)

【讨论】:

  • 嗨,我会澄清我的问题。我有一个 JSON 文件,我想将它解码成 lua 表。我不需要打印任何内容,我做断言只是为了测试本地问题。所以我需要将所有数据保存在具有 '\' 的 JSON 文件中
  • 请使用此信息更新您的问题(并提供一个有效的最小示例)
【解决方案4】:

您不需要 gsub。但无论如何它都在这里。

local a = "te\\st"
local b = string.gsub(a,'\\','\\')
assert(false,b)

【讨论】:

  • 嗨,这个解决方案不起作用。我可以使用什么其他方法来代替 gsub ?
猜你喜欢
  • 2017-10-01
  • 2021-09-08
  • 2012-11-16
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多