用Lua替换每个“ \”

时间:2019-02-26 13:02:57

标签: replace lua escaping

X-Problem:我想将 entire lua脚本转储到单个字符串行中,然后可以将其编译为C-Program。

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

我认为尝试这样的事情很有意义

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

2 个答案:

答案 0 :(得分:3)

如果我了解您的Y问题,则需要同时避免引号和反斜杠:

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

或使用其他单引号(仍转义反斜杠):

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

答案 1 :(得分:1)

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") -- will prepend backslash to any quote