【问题标题】:Escape string for Lua's string.formatLua 的 string.format 的转义字符串
【发布时间】:2013-08-10 06:03:37
【问题描述】:

我有一个需要添加变量的字符串,所以我使用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 个变量。

【问题讨论】:

    标签: string lua escaping lua-patterns


    【解决方案1】:

    您可以使用另一个 % 转义 %,例如string.format("%%20") 会给%20

    【讨论】:

    • 完美,正是我想要的
    【解决方案2】:

    与许多其他语言不同,Lua 使用% 来转义以下魔术字符:

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

    【讨论】:

      【解决方案3】:

      以下代码转义所有 URL 转义(即 % 后跟一个数字):

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

      【讨论】:

      • 为什么%%%1 不会引发错误?这里没有捕获的子字符串。根据 Lua 手册,只有%%%0 是可能的。
      • @EgorSkriptunoff,手册说“如果模式指定没有捕获,那么它的行为就像整个模式在捕获中一样。”。
      【解决方案4】:

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

      如果您有这样的字符串: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。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多