在Lua中替换每个“with”

问题描述 投票:1回答:2

X-Problem:我想将一个完整的lua脚本转储到单个字符串行,然后可以将其编译成C程序。

Y-问题:你如何用"取代每个\"

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

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

replace lua escaping
2个回答
3
投票

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

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

或使用其他单引号(仍然逃避反斜杠):

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

1
投票

X-Problem的解决方案是安全地转义任何可能干扰解释器的序列。

Lua有%qstring.format选项,它将以这种方式格式化和转义提供的字符串,它可以被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

© www.soinside.com 2019 - 2024. All rights reserved.