在 Lua 中用 \" 替换每个 "

X-问题:我想将整个 Lua 脚本转储为单个字符串行,然后可以编译为 C 程序。

Y-问题:如何用 \" 替换每个 "

我认为尝试这样做是有道理的

data = string.gsub(line, "c", "\c") 其中 c 是 " 字符。 但当然不行。

点赞
用户6881240
用户6881240

如果我理解你的Y问题,你需要转义引号和反斜杠:

data = string.gsub(line, "\"", "\\\"")

或者使用另一单引号(仍需转义反斜杠):

data = string.gsub(line, '"', '\\"')
2019-02-26 13:10:56
用户1599009
用户1599009

解决你的 X-问题 的方法是安全转义可能干扰解释器的任何序列。

Lua 可以使用 string.format 中的 %q 选项对提供的字符串进行格式化和转义,以便可以被 Lua 安全地读取。你的 C 解释器也应该如此。


示例字符串:This \string's truly"tricky

如果只是将其用单引号或双引号括起来,仍然会有引号提前结束字符串。还有无效的转义序列 \s

假设这个字符串已经在 Lua 中被正确处理了,所以我们将其作为参数传递: string.format("%q", 'This \\string\'s truly"tricky')

返回(注意,我在代码输入中使用了单引号):

"This \\string's truly\"tricky"

现在,这是一个完全有效的 Lua 字符串,可以从文件中写入和读取。无需手动转义每个特殊字符并冒险实现错误。


为了正确实现你的 Y 方法,使用 proper pattern matching 对捕获的字符串进行前缀+捕获字符串的替换,来转义(无效的)字符:

string.gsub('he"ll"o', "[\"']", "\\%1") -- 会在引号前面添加反斜杠

2019-03-01 14:43:51