lua中的魔法字符转义问题
2017-05-14 14:24
281 查看
lua中的魔法字符有( ) . % + - * ? [ ] ^ $ ,在表示它们时候要考虑用到转义,转义符号为%,但有些却不需要转义。下面我们通过实际代码来测试一下。
首先来认识一个函数,string.find()查找目标模板在给定字符串中出现的位置,找返回起始和结束位置,没找到返回nil
) 不需要转义也能被find到,当然转义过了也没有问题
这一些魔法字符,有些不需要转义,打印结果就正确;有些不转义,打印结果错误,但是不会报错;还有些直接报错。感觉挺有意思的,但是也有点不解,当然实际开发中,字符还是都应该加上转义。string.format()函数也会有类似的问题反馈
首先来认识一个函数,string.find()查找目标模板在给定字符串中出现的位置,找返回起始和结束位置,没找到返回nil
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1(2","(")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: unfinished capture stack traceback: [C]: in function 'find' test.lua:1: in main chunk [C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1(2","%(")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#( 需要转义
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1)2",")")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1)2","%)")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#
) 不需要转义也能被find到,当然转义过了也没有问题
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1.2",".")) root@16d2a5728582:~/mapan# lua test.lua 1 1 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1.2","%.")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#. 不需要转义能被find到,而且不会报错,但是返回的位置却不对,有点奇怪。加上转义字符%后,就成功返回了
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1%2","%")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: malformed pattern (ends with '%') stack traceback: [C]: in function 'find' test.lua:1: in main chunk [C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1%2","%%")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#% 不转义会被报错,加了转义字符之后就返回了正确的结果
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1+2","+")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1+2","%+")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#+ 不转义不会报错,加上转义字符之后也没问题
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1-2","-")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1-2","%-")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#- 不转义不会报错,加上转义字符也没有问题
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1*2","*")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1*2","%*")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#* 不转义不会报错,加上转义字符也没问题
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1?2","?")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1?2","%?")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#? 不转义不会报错,加上转义字符也没问题
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1[2","[")) root@16d2a5728582:~/mapan# lua test.lua lua: test.lua:1: malformed pattern (missing ']') stack traceback: [C]: in function 'find' test.lua:1: in main chunk [C]: ? root@16d2a5728582:~/mapan# cat test.lua print(string.find("1[2","%[")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#[ 不加转义会报错,加上转义之后正常
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1]2","]")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1]2","%]")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#] 不加转义不会报错,加上转义之后也正常
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1^2","^")) root@16d2a5728582:~/mapan# lua test.lua 1 0 root@16d2a5728582:~/mapan# cat test.lua print(string.find("1^2","%^")) root@16d2a5728582:~/mapan# lua test.lua 2 2 root@16d2a5728582:~/mapan#^ 不加转义前打印结果不正常,加上转义之后打印结果正常
root@16d2a5728582:~/mapan# cat test.lua print(string.find("1$2","$")) root@16d2a5728582:~/mapan# lua test.lua 4 3 root@16d2a5728582:~/mapan#$ 没加打印字符返回的结果不正常,加了之后打印结果就正常了
这一些魔法字符,有些不需要转义,打印结果就正确;有些不转义,打印结果错误,但是不会报错;还有些直接报错。感觉挺有意思的,但是也有点不解,当然实际开发中,字符还是都应该加上转义。string.format()函数也会有类似的问题反馈
相关文章推荐
- Javascript中特殊字符转义需要注意的一个小问题
- struts2在前台通过property获取属性值某些字符转义问题
- 数据库导入字符串路径转义字符问题
- lua 字符串 正则表达式 转义 特殊字符
- JSON 被转义的字符引发BUG问题
- 关于MYSQL 字符转义问题总结
- html拼接字符串中特殊字符(‘ “ 等的转义问题)
- 今天说说Oracle中的字符转义问题吧——escape关键字
- ORACLE 字符转义的问题
- java web url编码与解码--中文乱码和特殊字符转义问题
- 解决plist中无法正确读取\n转义字符的问题
- Chapter1 Lua 中的转义字符 and get start with Lua ,Types and Value
- java获取classpath文件路径空格转变成了转义字符%20的问题解决 !
- Java中的特殊字符的转义问题
- struts2在前台通过property获取属性值某些字符转义问题
- WebService 和 js中转义字符的问题
- url特殊字符转义问题
- 百度编辑器向数据库提交数据后字符转义的问题
- lua 字符串 正则表达式 转义 特殊字符
- java获取classpath文件路径空格转变成了转义字符%20的问题