查看: 24|回复: 0

lua内置库

[复制链接]

47

主题

53

回帖

1551

积分

金牌会员

积分
1551
发表于 2026-5-25 16:31:01 | 显示全部楼层 |阅读模式
lua内置的库,直接require就可以用
math库
Lua复制代码
--取整print(math.floor(3.9)) -- 向下取整 3print(math.ceil(3.1)) -- 向上取整 4print(math.modf(3.1)) -- 拆分整数和小数部分,返回两个值(整数 + 小数) 3  0.1--绝对值print(math.abs(-5))--幂运算print(2 ^ 3)--随机数math.randomseed(os.time()) -- 初始化随机种子print(math.random())       -- 输出类似:0.789456print(math.random(100))    -- 输出 1~100 之间的整数print(math.random(10, 20)) -- 输出 10~20 之间的整数-- 生成 [0,10) 之间的浮点数local float_rand = math.random() * 10print(float_rand) -- 输出类似:6.2345-- 最大值,最小值print(math.max(1, 5, 3, 9))  -- 输出:9print(math.min(-2, 0, 4, -5)) -- 输出:-5-- 去余数print(math.fmod(7, 3))  -- 输出:1print(7 % 3)  -- 输出:1print(math.fmod(-7, 3)) -- 输出:-1(% 运算符在Lua中结果符号与y一致,fmod与x一致)string库
覆盖字符串查找、替换、截取、匹配(正则)等所有字符串操作:

Lua复制代码
local str = require("string")  -- 也可直接用全局 string,或字符串对象方法-- 核心功能(两种调用方式:string.xxx 或 str:xxx)local s = "  hello lua  "str1 = string.format("我的名字是:%s 我的年龄是:%d, 面积是:%.2f", "fengfeng", 21, 3.1415)print(str1) -- 我的名字是:fengfeng 我的年龄是:21, 面积是:3.14print(str.sub(s, 3, 7))    -- 截取子串(索引 3-7)→ "hello"print(str.find(s, "lua"))  -- 查找子串位置 → 9  11print(string.gsub(s, "lua", "python")) -- 替换 → "  hello python  "print(string.match(s, "%a+")) -- 模式匹配(字母)→ "hello"-- 字符串对象方法(更简洁)print(s:upper())              -- 转大写 → "  HELLO LUA  "print(s:len())                -- 长度 → 10模式匹配
Lua 没有独立的正则表达式库,而是内置了轻量的模式匹配,核心差异如下:
功能标准正则Lua 模式匹配说明
字母匹配[a-zA-Z]%aLua 用 % 代替 `` 转义
数字匹配\d%d
任意字符..一致
重复匹配(1 + 次)++一致
重复匹配(0 + 次)**一致
匹配开头^^一致
匹配结尾$$一致
非贪婪匹配+?/*?无(默认贪婪)Lua 仅支持贪婪匹配
分组捕获(...)(...)一致,但不支持非捕获组
反义匹配(非字母)[^a-zA-Z]%A大写字母表示 “反义”
Lua复制代码
-- 1. 提取字符串中的第一个数字local s1 = "价格:99元"local num = string.match(s1, "%d+")print(num)  -- 输出:99local s = "name=张三,age=25"-- 模式中的两个()分别捕获 键 和 值local key, value = string.match(s, "(%a+)=([^,]+)")print("键:", key)    -- 输出:键:nameprint("值:", value)  -- 输出:值:张三-- 3. 匹配以特定字符开头/结尾的字符串local s3 = "hello.lua"local prefix = string.match(s3, "^%a+")  -- 匹配开头的字母local suffix = string.match(s3, "%a+$")  -- 匹配结尾的字母print(prefix, suffix)  -- 输出:hello   luatable库
补充 table 的通用操作(Lua 原生 table 仅支持 # 取长度,复杂操作需库函数):

Lua复制代码
local tbl = require("table")-- 核心功能local t = { 3, 1, 2 }table.sort(t)                -- 默认升序print(table.concat(t, ",")) --1,2,3table.insert(t, 10)       -- 插入元素 在最后插入元素 10print(table.concat(t, ",")) --1,2,3,10table.insert(t, 2, 99)       -- 插入元素(位置 2 插入 99)print(table.concat(t, ",")) -- 1,99,2,3,10--移除最后一个元素并返回print(table.remove(t)) -- 10--指定位置移除table.remove(t, 2)print(table.concat(t, ",")) -- 1,2,3排序
sort默认是升序,如果需要降序,就需要自定义排序函数了

Lua复制代码
os库
获取系统信息、执行系统命令、处理时间等

Lua复制代码
print(os.date("%Y-%m-%d %H:%M:%S")) -- 当前时间 → 2026-01-04 12:00:00print(os.time())                    -- 时间戳(秒)→ 1735996800print(os.date("%Y-%m-%d %H:%M:%S", 1767882504)) -- 将时间戳转换为时间字符串print(os.getenv("PATH"))            -- 获取环境变量os.execute("chcp 65001") -- 解决windows执行命令输出乱码问题os.execute("dir")                 -- 执行系统命令(Linux)/ dir(Windows)os.exit(0)                          -- 退出程序(0=正常退出)io库
处理文件的读写、打开 / 关闭,分为 “简单 IO” 和 “文件句柄 IO”:

Lua复制代码
local io = require("io")-- 1. 简单IO(一次性读写)--print("请输入:")io.write("请输入:") -- print默认是有一个换行的io.flush()data = io.read()print("你输入的内容:", data)-- 2. 文件句柄IO(推荐,可控性强)local f = io.open("test.txt", "w") -- 打开文件(w=写入,r=读取,a=追加)if f then    f:write("hello lua\n")        -- 写入内容    f:close()                     -- 关闭文件end-- 读取文件local f = io.open("test.txt", "r")if f then    local content = f:read("*a")  -- 读取所有内容    print(content)                -- 输出:hello lua    f:close()end
io.read() 的参数主要是模式字符串,分为 “通配符模式” 和 “数字模式” 两类,先讲最常用的通配符模式:
参数(模式)含义示例场景
"*l"读取一行(默认模式),不包含末尾的换行符;遇到文件尾返回 nil读取用户输入的一行文本
"*L"读取一行,包含末尾的换行符;遇到文件尾返回 nil 5.3才有保留换行符的文本读取
"*a"读取全部内容(从当前位置到文件尾),适合读取小文件一次性读取整个文件内容
"*n"读取一个数字(整数 / 浮点数),自动跳过开头的空白字符;非数字返回 nil读取用户输入的数字增强内置库
如果你直接在官网下载的lua可执行文件,内置库你就只能用上面那些
如果你是用的一键安装的那种,那么会有很多库可以用,比如json、re、socket
json库
Lua复制代码
local json = require("json")--表转jsonuser = {    name="fengfeng",    age=12,    info={        addr="长沙"    }}json_str = json.encode(user)print(json_str) -- {"info":{"addr":"长沙"},"name":"fengfeng","age":12}--json转表tb = json.decode('{"info":{"addr":"长沙"},"name":"fengfeng","age":12}')print(tb.name) -- fengfengprint(tb.info.addr) -- 长沙re正则库
Lua复制代码
string增强库
这个地方有的人会有误解,为什么不能直接require用
因为这种增强库是以扩展原库的方式扩展的

Lua复制代码
require("strbuf")require("list")require("string_ext")print(string.split("1,2,3,4,5", ",")) -- {1=1,2=2,3=3,4=4,5=5}print(string.trim("   前后都有空格   ")) -- 前后都有空格table增强库
Lua复制代码











您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表