Lua忽略转义序列

5

目前Lua有以下转义序列:

  • \a:响铃
  • \b:退格符
  • \f:换页符
  • \n:换行符
  • \r:回车符
  • \t:制表符
  • \v:垂直制表符
  • \\:反斜杠
  • \":双引号
  • \':单引号
  • \nnn:八进制值(nnn是三个八进制数字)
  • \xNN:十六进制值(Lua 5.2/LuaJIT,NN为两个十六进制数字)

如果我想使用字符串"\a\f\\\""而忽略所有这些转义序列,按照字面意思解释它,该怎么办?


5
你的意思是“使用字符串”是什么?你想要做什么?[[...]]的字符串不会解释任何转义序列。 - Etan Reisner
基本上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 - Bernardo Meurer
1
那个部分想要忽略转义序列的是哪一部分?唯一一个你没有经过Lua处理的字符串是在wordlist中。所以你可以在wordlist中避免它们,但是当你的函数获取它们时,instr已经对它们进行了解释。你到底想在这里做什么?忽略转义字节以检查已知/不良单词(以避免尝试“欺骗”您的检查)? - Etan Reisner
5
Lua没有八进制转义序列,\nnn转义是十进制的。 - mpeterv
1
我知道这已经很老了,但是我在搜索时发现你的转义代码参考列表中存在一个错误:\nnn 在lua中不是八进制,而是十进制。你可能正在考虑使用类似于C风格的语言,其中可以键入“\040”以获取ASCII空格,40八进制为32十进制,但是在lua中,由于被解释为十进制40,因此它产生左括号。 - Aiken Drum
显示剩余4条评论
2个回答

4
你可以使用Lua的长括号,也称为括号形式,例如[[\a\f\\]] 请参阅转义序列下面的内容: http://lua-users.org/wiki/StringsTutorial 你还可以使用string.format%q来进行一些操作,但我不记得这将如何产生结果。我认为它以适合成为有效Lua的格式呈现字符串。
此外,正如其他评论中所指出的那样,C的八进制转义序列\nnn在Lua中不存在,并且很容易与Lua的\ddd转义序列混淆,它期望十进制数字。
以下参考图像摘自Lua 5.4参考手册

Lua's subset of C-like escape sequences Decimal, not octal Hex Long brackets form


0

基本上,您已经自己回答了这个问题。 您可以使用\\转义反斜杠。 要转义双引号,您可以使用单引号作为分隔符。

'\\a\\f\\\\\\"'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接