Lua 的 String(字符串) 模块

Lua 的 String 模块 提供了强大的字符串处理功能,主要通过 string 模块实现。以下是 Lua string 模块的主要功能和用法:

基础字符串操作

  1. 字符串连接

    • 使用 .. 操作符连接字符串
    lua 复制代码
    local str = "Hello" .. " " .. "World"  -- 结果为 "Hello World"
  2. 字符串长度

    • 使用 # 操作符获取字符串长度
    lua 复制代码
    local len = #"Lua"  -- 结果为 3

常用字符串函数

  1. string.sub(s, i [, j])

    • 截取字符串 s 从位置 i 到 j 的子串
    • 示例:
    lua 复制代码
    local s = "Programming"
    print(string.sub(s, 4, 7))  -- 输出 "gram"
  2. string.find(s, pattern [, init [, plain]])

    • 在字符串 s 中查找匹配 pattern 的位置
    • 示例:
    lua 复制代码
    local start, finish = string.find("Hello Lua", "Lua")
    -- start=7, finish=9
  3. string.match(s, pattern [, init])

    • 返回字符串 s 中匹配 pattern 的第一个子串
    • 示例:
    lua 复制代码
    local word = string.match("Lua is great", "%a+")  -- 返回 "Lua"
  4. string.gsub(s, pattern, repl [, n])

    • 全局替换字符串中的匹配项
    • 示例:
    lua 复制代码
    local s = string.gsub("Lua Lua Lua", "Lua", "Python", 2)
    -- 结果为 "Python Python Lua"

字符串格式化

  1. string.format(formatstring, ...)

    • 类似 C 的 printf 格式化输出
    • 示例:
    lua 复制代码
    local formatted = string.format("Value: %.2f", 3.14159)
    -- 结果为 "Value: 3.14"

字符串转换

  1. string.upper(s)

    • 将字符串转换为大写
    lua 复制代码
    print(string.upper("lua"))  -- 输出 "LUA"
  2. string.lower(s)

    • 将字符串转换为小写
    lua 复制代码
    print(string.lower("LUA"))  -- 输出 "lua"

字符串模式匹配(正则表达式)

Lua 提供了轻量级的模式匹配功能:

  1. 字符类

    • %a: 字母
    • %d: 数字
    • %s: 空白字符
    • %w: 字母数字
  2. 模式修饰符

    • +: 1次或多次
    • *: 0次或多次
    • -: 最小匹配
    • ?: 0或1次

示例:

lua 复制代码
local date = "2023-05-15"
local year, month, day = string.match(date, "(%d+)-(%d+)-(%d+)")
-- year="2023", month="05", day="15"

字符串缓冲区

对于大量字符串拼接,可以使用表作为缓冲区:

lua 复制代码
local buf = {}
for i = 1, 100 do
    buf[#buf+1] = "line " .. i
end
local result = table.concat(buf, "\n")

UTF-8 支持(Lua 5.3+)

Lua 5.3 及以上版本增加了 UTF-8 支持:

lua 复制代码
local len = utf8.len("你好")  -- 结果为 2

Lua 的字符串处理功能强大而高效,是处理文本数据的理想选择。

相关推荐
peijiping8 小时前
Agent 工具执行:并行(parallel_tool_calls)和后台(run_in_background)到底有什么区别? (学习笔记)
笔记·学习·ai agent·claude code
Oll Correct8 小时前
Adobe illustrator 案例四:吃豆人 (Pac-Man)图标绘制
笔记·ui·adobe·illustrator
LuminousCPP8 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
萌新小白YXY8 小时前
SAE J1587/SAE J1708 协议笔记
笔记·单片机·嵌入式硬件
鬼手点金8 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
Mr. zhihao8 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
IT古董8 小时前
【MES学习笔记系列】MES 推荐书籍与资源
笔记·学习
格林威9 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
一米阳光86619 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
djjjx.9 小时前
【 C++ 】多态
开发语言·c++·多态