LuaJit转义的问题
之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对。在很多语言中,正则的转义字符是“\”,但在lua中却不是,至少标准的不是。
引号,使用“\”进行转义,跟字符串定义类似
local s = “\"Hello World!\””
=> 输出 “Hello World!” - 带双引号
其它字符如特殊的字符(被称为魔法字符):( ) . % + – * ? [ ] ^ $,想匹配这些字符时需要加上%,比如想匹配%则需要使用%%,%( 匹配左括号 %) 匹配右括号,如果%用于字母和数字的字符,意义就变了,比如%d、%a、%D、%U、%1。
“% + 大写字母”是所有对应小写字母的补集
| . | 所有字符 |
| %a | 字母 |
| %c | 控制字符 |
| %d | 数字 |
| %l | 小写字母 |
| %p | 标点符号 |
| %s | 空白字符 |
| %u | 大写字符 |
| %w | 字母和数字字符 |
| %x | 十六进制数字 |
| %z | 内部表示为0的字符 |
| + | 重复1次或多次 |
| * | 重复0次或多次 |
| - | 也是重复0次或多次 |
| ? | 出现0或1次 |
在lua中还是较为方便的处理嵌套的,因为它有%b - 匹配对称字符。
比如下面这个例子
local x = string.gsub(“xddddyxxxxxyxxxy”, “%bxy”, “a”)
print(x)
=>axxxxaxxa
不过要注意的是string.fromat中的格式跟C语言中的printf一样,与上面表格列出的捕获字符不同
不过也有特例和异常,可以参考这里:http://pgl.yoyo.org/luai/i/string.format
浙公网安备 33010602011771号