X-Problem:我想将 entire lua脚本转储到单个字符串行中,然后可以将其编译为C-Program。
Y问题:如何用"
替换每个\"
?
我认为尝试这样的事情很有意义
data = string.gsub(line, "c", "\c")
其中c 是"
字符。但这当然行不通。
答案 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