【问题标题】:Lua ignore Escape SequenceLua忽略转义序列
【发布时间】:2021-04-06 21:26:02
【问题描述】:

目前 Lua 有以下转义序列:

  • \a:贝尔
  • \b:退格
  • \f:换页
  • \n: 换行
  • \r:回车
  • \t:标签
  • \v:垂直制表符
  • \\: 反斜杠
  • \":双引号
  • \':单引号
  • \nnn:八进制值(nnn 是 3 个八进制数字)
  • \xNN:十六进制值(Lua5.2/LuaJIT,NN是两个十六进制数字)

我如何使用诸如"\a\f\\\"" 之类的字符串而忽略所有这些转义序列,按字面意思解释它?

【问题讨论】:

  • “使用字符串”是什么意思?你想做什么? [[...]] 字符串不解释任何转义序列。
  • 基本上function checkword (instr)< wordlist = {"FIN", "FFI", "PHIN", "PHEN", "FIN", "PHIN", "IFFUM", "MUF", "MEUFEEN", "FEN","FEEN"} for i, v in ipairs (wordlist) do if (string.match(processstring(instr), v) ~= nil)then return 1 end end end
  • 其中哪一部分想要忽略转义序列?唯一没有经过 lua 处理的字符串的部分是 wordlist。因此,您可以在 wordlist 中避免使用它们,但 instr 已经在您的函数获取它们后对其进行了解释。你到底想在这里做什么?在检查已知/坏词方面忽略转义字节(以避免尝试“欺骗”您的检查)?
  • Lua 没有八进制转义序列,\nnn 转义是十进制。
  • Etan,如果我在 wordlist 中有一个像 "/\/\ |_| |= |= | |\|" 这样的字符串,它就不起作用;不知道为什么。

标签: lua escaping string-literals


【解决方案1】:

我相信你可以做到[[\a\f\\]]

在 Escape Sequences 下查看这里: http://lua-users.org/wiki/StringsTutorial

您也许还可以使用string.format%q 做一些事情,但我不记得这会是什么结果。我认为它以适合有效 Lua 的格式呈现字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2011-07-11
    • 1970-01-01
    • 2021-03-02
    • 2018-02-24
    相关资源
    最近更新 更多