在LUA中将字符串转换为多行/原始字符串

有没有一种方法将带引号的字符串转换为多行字符串?

例如 "This string \66 here" 转换为 [[This string \66 here]],因为我想忽略转义字符的解释。

点赞
用户2858170
用户2858170

Lua 5.3参考手册 3.1: 词法约定

文本字符串也可以使用长格式(用长方括号括起来)来定义。我们将n级打开的长方括号定义为一个方括号后跟n个等号再后面是另一个打开的方括号。因此,级别为0的打开的长方括号写为[[,级别为1的打开的长方括号写为[=[,以此类推。关闭的长方括号定义方式类似;例如,级别为4的关闭长方括号写为]====]。长字面量以任何级别的打开长方括号开头,并在同一级别的第一个关闭长方括号处结束。它可以包含任何文本,但不能包含同一级别的关闭方括号。在此括号形式中的文字可以延续多行,不解释任何转义序列,并忽略任何其他级别的长括号。任何类型的换行符序列(回车符、换行符、回车符后跟换行符或换行符后跟回车符)都将转换为简单换行符。

为了方便,在打开的长方括号紧随换行符的情况下,不会将换行符包含在内。

这就是你需要了解关于长字符串的一切。

将使用引号 "some string" 定义的字符串转换为[[some string]] 形式并没有太大意义,因为引号和方括号实际上都不是该字符串的一部分,该字符串本身是相同的。唯一的差别可能是一个前导换行符,在方括号中被忽略或不被解释的转义序列。

只有在存在嵌套字符串的情况下,引号和方括号才是字符串的一部分。在这种情况下,转换也没有太大意义,因为您无法像使用方括号那样嵌套带引号的字符串。

也许您的整个方法有点不对?

2017-06-08 13:04:28
用户4515989
用户4515989

你是否在寻找像下面这样的东西?

local db = "google"
local tbl = "accounts"
local where = "field = 'VALUE' AND TRUE"
local order = "id DESC"

local query = string.format([[
    SELECT *
    FROM `%s`.`%s`
    WHERE %s
    ORDER BY %s
]], db, tbl, where, order)
2017-06-08 15:03:59