为Lua的string.format转义字符串

时间:2013-08-08 13:36:28

标签: string lua escaping lua-patterns

我有一个字符串,我需要添加一个变量,所以我使用string.format方法,但字符串也包含符号"%20"(不确定它代表什么,可能是一个空格或其他东西)。无论如何,因为字符串包含多个"%",我只想将变量添加到第一个来设置id,有没有办法在点或其他东西处转义字符串?

现在:

ID = 12345
string.format("id=%s&x=foo=&bar=asd%20yolo%20123-1512", ID)

我得到bad argument #3 to 'format' (no value).错误 - 因为它预计会传递3个变量。

4 个答案:

答案 0 :(得分:5)

您可以使用其他%转义%,例如string.format("%%20")%20

答案 1 :(得分:3)

与许多其他语言不同,Lua使用%来逃避以下魔术角色:

( ) . % + - * ? [ ] ^ $

答案 2 :(得分:1)

以下代码会转义所有网址转义(即%后跟数字):

ID=12345
f="id=%s&x=foo=&bar=asd%20yolo%20123-1512"
f=f:gsub("%%%d","%%%1")
print(string.format(f,ID))

答案 3 :(得分:1)

我看到你已经接受了答案,但实际上,这种情况几乎不会发生在真实的应用程序中。您应该尽量避免将模式与其他数据混合。

如果您有这样的字符串:x=foo=&bar=asd%20yolo%20123-1512并且您希望使用string.format将ID部分添加到其中,则应使用以下内容:

s = "x=foo=&bar=asd%20yolo%20123-1512"
ID = 12345
string.format("id=%d&%s", ID, s)

(注意:我使用了%d,因为您的ID是一个数字,所以在这种情况下它更适合%s。)