天天看点

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一样,与上面表格列出的捕获字符不同

LuaJit转义的问题

继续阅读