课时 9 · 字符串处理

课时 9 · 字符串处理(Lua 进阶):熟练使用 string 库处理文本。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。

教程/第二部分 · Lua 进阶更新于 2026-10-073 个小节 教程第 12 / 23 篇 Lua进阶

本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 Lua 在线运行器 并直接跑出结果 (课程示例统一按 5.1 跑;运行器里也能切到 5.3)。

本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。

本课目标

  • 熟练使用 string 库处理文本。

知识讲解

string 库常用函数:string.find(查找位置)、string.match(捕获匹配)、string.gsub(全局替换)、string.format(格式化)、string.sub(截取)、string.upper/string.lower(大小写)。Lua 模式匹配与正则类似但更简单:%d 数字、%a 字母、. 任意字符、+ * ? 量词、() 捕获。

示例:文本解析

local line = '战士-10-5000'
local name, level, gold = string.match(line, '([^%-]+)-(%d+)-(%d+)')
print(name, level, gold)      -- 战士  10  5000

local s = 'hello world'
print(string.upper(s))        -- HELLO WORLD
print(string.format('%s 等级 %d', name, tonumber(level)))

练习任务

  • 解析「玩家名-等级-金币」文本并提取三个字段;再对含多个玩家的多行文本逐行解析并求和金币。

参考:多行解析

local text = '战士-10-5000\n法师-8-3000\n道士-9-4000'
local total = 0
for line in text:gmatch('[^\n]+') do
    local name, level, gold = line:match('([^%-]+)-(%d+)-(%d+)')
    if name then
        total = total + tonumber(gold)
        print(name, level, gold)
    end
end
print('金币合计', total)
本篇依据
  • 《996 新三端 Lua 开发教学技术手册》课时 9

参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。