字符串库
STRING字符串处理:查找替换、模式匹配、格式化 | 本页 14 个接口。登录全站学员账号后:给函数打 ✓ 记录学习进度、写私人备注。
把字符串 s 中 [i, j](默认 [1,1])的字符转成数字字节码。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
| i | 起始位置,默认 1 |
| j | 结束位置,默认 i |
多个数字字节码
print(string.byte('ABC')) --> 65
print(string.byte('ABC', 1, 3)) --> 65 66 67把若干数字字节码拼成字符串,是 string.byte 的逆操作。
| 参数 | 说明 |
|---|---|
| ... | 多个字节码数字 |
字符串
print(string.char(72, 105)) --> Hi print(string.char(0xBB, 0xD8)) -- GBK 的'回'字(按编码环境)
把函数序列化成二进制字符串(可被 load/loadstring 还原执行)。要求函数没有 upvalue。
| 参数 | 说明 |
|---|---|
| function | Lua 函数 |
二进制字符串
local f = loadstring(string.dump(function(x) return x * 2 end)) print(f(21)) --> 42
查找子串/模式,返回首尾位置(找不到返回 nil)。plain=true 时关闭模式匹配按纯文本查找。模式语法见 string.match。
| 参数 | 说明 |
|---|---|
| s | 目标字符串 |
| pattern | 模式/子串 |
| init | 起始查找位置,默认 1 |
| plain | true=纯文本查找 |
起位置, 止位置, (捕获组...);找不到 nil
print(string.find('hello world', 'wor')) --> 7 9
print(string.find('abc123', '%d+')) --> 4 6
print(string.find('a.b.c', '.', 1, true)) --> 2 2 (纯文本的'.')按格式串生成字符串(同 C 的 printf)。常用:%d 整数、%s 字符串、%.2f 两位小数、%5d 宽度、%02d 补零、%x 十六进制。
| 参数 | 说明 |
|---|---|
| formatstring | 格式串 |
| ... | 填充值 |
格式化后的字符串
print(string.format('等级:%d 经验:%.2f%%', 35, 99.567))
--> 等级:35 经验:99.57%
print(string.format('%05d', 42)) --> 00042
print(string.format('%x', 255)) --> ff返回迭代器,依次遍历 s 中所有匹配 pattern 的子串(有捕获组则返回捕获组)。提取全部数据的利器。
| 参数 | 说明 |
|---|---|
| s | 目标字符串 |
| pattern | 模式 |
迭代函数
for k, v in string.gmatch('a=1,b=2,c=3', '(%w+)=(%w+)') do
print(k, v)
end
--> a 1 / b 2 / c 3把 s 中所有匹配 pattern 的部分替换为 repl(字符串/%1引用捕获/函数/table 形式均可),n 限制替换次数。返回新串+替换次数。
| 参数 | 说明 |
|---|---|
| s | 目标字符串 |
| pattern | 模式 |
| repl | 替换内容(字符串/表/函数) |
| n | 最多替换次数,默认全部 |
新字符串, 替换次数
print(string.gsub('你好 世界', '%s', '_')) --> 你好_世界 1
print(string.gsub('经验+100', '%d+', function(n) return n * 2 end))
--> 经验+200 1
print(string.gsub('abcabc', 'a', 'X', 1)) --> Xbcabc 1返回字符串的字节长度(等价 #s)。中文在 GBK 下一个字占 2 字节、UTF-8 下占 3 字节。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
字节长度(number)
print(string.len('hello')) --> 5
print(string.len('木剑')) --> 4 (GBK) / 6 (UTF-8)把所有大写字母转小写(只影响 ASCII 字母)。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
新字符串
print(string.lower('Hello WORLD')) --> hello world在 s 中找第一个匹配 pattern 的部分,返回捕获的内容(与 find 返回位置不同)。找不到返回 nil。
| 参数 | 说明 |
|---|---|
| s | 目标字符串 |
| pattern | 模式 |
| init | 起始位置,默认 1 |
捕获内容(无捕获组则整个匹配);找不到 nil
print(string.match('获得 1000 经验', '%d+')) --> 1000
print(string.match('2026-09-20', '(%d+)-(%d+)')) --> 2026 09把字符串 s 重复 n 次拼接。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
| n | 重复次数 |
新字符串
print(string.rep('★', 5)) --> ★★★★★
print(string.rep('-', 20)) --> 分隔线把字符串按字节倒序。含中文(多字节)时会把字切碎,只适合纯 ASCII。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
新字符串
print(string.reverse('abc123')) --> 321cba截取 s 从位置 i 到 j 的子串(含两端,闭区间)。i/j 可为负数(从尾部倒数,-1 是最后一个字符)。j 省略默认到末尾。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
| i | 起始位置(负数从尾数) |
| j | 结束位置,默认 -1 |
子串
local s = 'hello world' print(string.sub(s, 1, 5)) --> hello print(string.sub(s, -5)) --> world print(string.sub(s, 7, -1)) --> world
把所有小写字母转大写(只影响 ASCII 字母)。
| 参数 | 说明 |
|---|---|
| s | 字符串 |
新字符串
print(string.upper('hello')) --> HELLO