常用库
2024/4/7大约 6 分钟
常用库
String 库
..链接两个字符串string.upper(argument)字符串全部转为大写字母。string.lower(argument)字符串全部转为小写字母。string.len(arg)计算字符串长度string.reverse(arg)字符串反转string.format(...)返回一个类似printf的格式化字符串string.byte(s [, i [, j ]])转换字符为整数值(可以指定某个字符,默认第一个字符)string.char(arg)将整型数字转成字符并连接string.rep(string, n)返回字符串string的n个拷贝string.gsub(mainString, findString, replaceString, num)在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)string.find (str, substr, [init, [end]])在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。string.gmatch(str, pattern)返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil。string.match(str, pattern, init)寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
字符串格式化
string.format() 类似c里的 printf()
print(string.format("name %s, age %s", "yjc", 20)) -- name yjc, age 20
print(string.format("%.4f",1/3)) -- 0.3333格式字符串可能包含以下的转义码
%c- 接受一个数字, 并将其转化为ASCII码表中对应的字符%d,%i- 接受一个数字并将其转化为有符号的整数格式%o- 接受一个数字并将其转化为八进制数格式%u- 接受一个数字并将其转化为无符号整数格式%x- 接受一个数字并将其转化为十六进制数格式, 使用小写字母%X- 接受一个数字并将其转化为十六进制数格式, 使用大写字母%e- 接受一个数字并将其转化为科学记数法格式, 使用小写字母e%E- 接受一个数字并将其转化为科学记数法格式, 使用大写字母E%f- 接受一个数字并将其转化为浮点数格式%g(%G)- 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式%q- 接受一个字符串并将其转化为可安全被Lua编译器读入的格式%s- 接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入
- 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
- 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
- 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
- 宽度数值
- 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如
%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.
注:
string.match()、string.gmatch()目前并不能被 JIT 编译,OpenResty 里应尽量使用ngx_lua模块提供的ngx.re.match等API。
Table 库
table.concat (table [, sep [, start [, end]]])concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。table.insert (table, [pos,] value)在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.table.maxn (table)指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)table.remove (table [, pos])返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。table.sort (table [, comp])对给定的table进行升序排序。
日期时间库
os.time ([table])如果不使用参数 table 调用 time 函数,它会返回当前的时间和日期(它表示从某一时刻到现在的秒数)。如果用 table 参数,它会返回一个数字,表示该 table 中 所描述的日期和时间(它表示从某一时刻到 table 中描述日期和时间的秒数)。os.difftime (t2, t1)返回 t1 到 t2 的时间差,单位为秒。os.date ([format [, time]])把一个表示日期和时间的数值,转换成更高级的表现形式。其第一个参数 format 是一个格式化字符串,描述了要返回的时间形式。第二个参数 time 就是日期和时间的数字表示,缺省时默认为当前的时间。
如果使用OpenResty,不建议使用Lua的标准时间函数,因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对性能造成较大影响。推荐使用 ngx_lua 模块提供的带缓存的时间接口,如
ngx.today,ngx.time,ngx.utctime,ngx.localtime,ngx.now,ngx.http_time,以及ngx.cookie_time等
数学库
常用数学函数:
math.rad(x)角度x转换成弧度math.deg(x)弧度x转换成角度math.max(x, ...)返回参数中值最大的那个数,参数必须是number型math.min(x, ...)返回参数中值最小的那个数,参数必须是number型math.random ([m [, n]])不传入参数时,返回 一个在区间[0,1)内均匀分布的伪随机实数;只使用一个整数参数m时,返回一个在区间[1, m]内均匀分布的伪随机整数;使用两个整数参数时,返回一个在区间[m, n]内均匀分布的伪随机整数math.randomseed (x)为伪随机数生成器设置一个种子x,相同的种子将会生成相同的数字序列math.abs(x)返回x的绝对值math.fmod(x, y)返回 x对y取余数math.pow(x, y)返回x的y次方math.sqrt(x)返回x的算术平方根math.exp(x)返回自然数e的x次方math.log(x)返回x的自然对数math.log10(x)返回以10为底,x的对数math.floor(x)返回最大且不大于x的整数math.ceil(x)返回最小且不小于x的整数math.pi圆周率math.sin(x)求弧度x的正弦值math.cos(x)求弧度x的余弦值math.tan(x)求弧度x的正切值math.asin(x)求x的反正弦值math.acos(x)求x的反余弦值math.atan(x)求x的反正切值