10757

54 分钟

#Lua 的 String 模块

函数说明
string.byte读取字节(字符的编码)
string.char由编码生成字符串
string.dump将函数编译成二进制块
string.find字符串搜索
string.format格式化生成字符串
string.gmatch字符串全局匹配
string.gsub字符串全局替换
string.len获取字符串长度
string.lower字符串转小写
string.match字符串匹配
string.pack格式化生成二进制字符串
string.packsize获取格式化二进制字符串的长度
string.rep重复字符串
string.reverse反转字符串
string.sub提取子字符串
string.unpack从二进制字符串中解包数据
string.upper字符串转大写

#string.byte

string.byte (s [, i [, j]])

说明

从字符串中读取多个字节:s[i], s[i+1], ..., s[j]

索引可以为负数,从字符串末尾向前索引,最后一个字符位的索引为 -1。

参数

  • s - 要读取的字符串
  • i - 要读取的第一个字节索引;默认为 1
  • j - 要读取的最后一个字节索引;默认为 i

返回值

  • 返回字符的整数编码 s[i], s[i+1], ..., s[j]

示例

local text = "Hello World" print(string.byte(text, 3, 7))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.char

string.char (···)

说明

通过字符编码生成字符串。

参数

  • ... - 字符编码

返回值

  • 返回生成的字符串

示例

print(string.char(72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.dump

string.dump (function [, strip])

说明

将函数编译成二进制代码块,可以被 load 函数加载后调用。

参数

  • function - 要编译的函数
  • strip - 是否包含调试信息;默认为 false

返回值

  • 返回生成的二进制代码块(字符串)

示例

function add(a, b) return a + b end -- 将函数编译为二进制字符串 local binary_code = string.dump(add) print(type(binary_code)) -- 输出: string print(#binary_code) -- 输出: 二进制代码的长度

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.find

string.find (s, pattern [, init [, plain]])

说明

在字符串 s 中查找第一个匹配的 pattern,返回起始和结束位置的索引。

参数

  • s - 被搜索的字符串
  • pattern - 模式串,参考 模式匹配
  • init - 开始搜索的位置索引;默认为 1
  • plain - 是否是纯文本,为 true 时禁用 魔法字符;默认为 false

返回值

  • 成功时返回匹配字符串的首尾索引以及全部的子捕获
  • 失败时返回 nil

示例

-- 简单查找子串 print(string.find("hello world", "world")) print(string.find("hello world", "(world)")) -- 模式匹配分析邮箱地址 print(string.find("[email protected]", "(.*)@([^%.]*)%.(.*)"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.format

string.format (fmt, ···)

说明

格式化生成字符串,参考 C 语言标准库函数 sprintf

参数

  • fmt - 格式化字符串,参考 ISO C 格式
  • ... - 额外参数

返回值

  • 返回生成的字符串

示例

-- 整数格式化 print(string.format("整数: %d", 42)) -- 输出: 整数: 42 print(string.format("价格: %d 元", 100)) -- 输出: 价格: 100 元 -- 浮点数格式化 print(string.format("圆周率: %f", math.pi)) -- 输出: 圆周率: 3.141593 print(string.format("百分比: %.2f%%", 85.567)) -- 输出: 百分比: 85.57% -- 科学计数法 print(string.format("科学计数: %e", 1234567)) -- 输出: 科学计数: 1.234567e+06

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.gmatch

string.gmatch (s, pattern [, init])

说明

在字符串 s 中查找所有匹配模式 pattern 的字串,返回迭代器函数。

参数

  • s - 被搜索的字符串
  • pattern - 模式串,参考 模式匹配
  • init - 开始搜索的位置索引;默认为 1

返回值

  • 返回一个迭代器函数,每次迭代时返回一个匹配

示例

local text = "hello world from lua programming" for word in string.gmatch(text, "%a+") do print(word) end

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.gsub

string.gsub (s, pattern, repl [, n])

说明

将字符串 s 中所有匹配模式 pattern 的字串替换为 repl

参数

  • s - 被搜索的字符串
  • pattern - 模式串,参考 模式匹配
  • repl - 用于替换的字符串,也可以是表或函数
    • 字符串 - 直接替换,其中 % 是转义字符, %n 表示第 n 个子捕获
    • 表 - 用匹配的子串作为索引读取元素,用该元素替换
    • 函数 - 用匹配的子串作为参数调用函数,用返回值替换
  • n -

返回值

  • 返回替换后的字符串和替换的次数

示例

-- 简单文本替换 print(string.gsub("hello world", "world", "Lua")) -- 模式匹配 print(string.gsub("apple \t orange \n banana", "%s+", " ")) -- 查表替换 local repl_table = {apple="APPLE", orange="Orange", banana="Banana"} print(string.gsub("apple orange banana", "%a+", repl_table)) -- 调用函数替换 local repl_func = function(text) print(string.sub(text, 1, 1)) end print(string.gsub("apple orange banana", "%a+", repl_func))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.len

string.len (s)

说明

获取字符串的长度。

参数

  • s - 要获取长度的字符串

返回值

  • 返回字符串的长度

示例

print(string.len("")) -- 空字符串 print(string.len("Hello World")) print(string.len("X\000Y\000Z")) -- 空字符 \000 也计算长度

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.lower

string.lower (s)

说明

将字符串 s 转换为小写。

参数

  • s - 要转换的字符串

返回值

  • 返回转换后的字符串

示例

print(string.lower("Hello World"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.match

string.match (s, pattern [, init])

说明

在字符串 s 中查找第一个与模式 pattern 匹配的字串。

参数

  • s - 被搜索的字符串
  • pattern - 模式串,参考 模式匹配
  • init - 开始搜索的位置索引;默认为 1

返回值

  • 成功时返回匹配的字串
  • 失败时返回 nil

示例

-- 简单查找字串 print(string.match("Apple Orange Banana", "Orange")) -- 模式匹配 print(string.match("Apple Orange Banana", "B%a*"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.pack

string.pack (fmt, v1, v2, ···)

说明

将数据按照格式 fmt 打包成二进制块(字符串)。

返回的结果可以使用 string.unpack 解包。

参数

  • fmt - 格式字符串
    • < - 设置小端
    • > - 设置大端
    • = - 设置本机字节序
    • ![n] - 设置最大对齐方式 n (默认为原生对齐方式)
    • b - 有符号字节(char)
    • B - 无符号字节(char)
    • h - 有符号 short(本机大小)
    • H - 无符号 short(本机大小)
    • l - 有符号 long(本机大小)
    • L - 无符号 long(本机大小)
    • j - 一个 lua_Integer
    • J - 一个 lua_Unsigned
    • T - 一个 size_t(原始尺寸)
    • i[n] - n 字节有符号 int(默认为本机大小)
    • I[n] - n 字节无符号 int(默认为本机大小)
    • f - 一个 float(原始尺寸)
    • d -: 一个 double(原始尺寸)
    • n - 一个 lua_Number
    • cn - 具有 n 字节的固定大小字符串
    • z - 以零结尾的字符串
    • s[n] - 一个字符串,其长度以字节为单位编码为无符号整数n(默认为 a size_t)
    • x - 一个字节的填充
    • Xop - 根据选项对齐的空项op (否则将被忽略)
    • ' '(空格)- 忽略,不会起到任何效果,可用于分隔格式字符提高可读性

返回值

  • 返回生成的二进制字符串

示例

-- 打包 local binary = string.pack("iid", 100, 200, 3.14159) print("打包大小:", #binary) -- 解包 local v1, v2, v3, pos = string.unpack("iid", binary) print(string.format("解包结果: %d, %d, %.5f", v1, v2, v3))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.packsize

string.packsize (fmt)

说明

获取 string.pack 使用 fmt 格式打包数据的结果大小。

参数

  • fmt - 格式字符串,参考 string.pack,不能使用可变长度的格式

返回值

  • 返回预计打包大小

示例

print(string.packsize("iid")) print(string.packsize("iidjj"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.rep

string.rep (s, n [, sep])

说明

重复 n 次字符串 s,生成字符串。

参数

  • s - 要重复的字符串
  • n - 要重复的次数
  • sep - 重复时插入的分隔符

返回值

  • 返回生成的字符串

示例

-- 简单重复 print(string.rep("Hello", 5)) -- 添加分隔符 print(string.rep("XXX", 5, "-"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.reverse

string.reverse (s)

说明

将字符串 s 反转。

参数

  • s - 要反转的字符串

返回值

  • 返回反转后的字符串

示例

print(string.reverse("Hello World"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.sub

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

说明

从字符串 s 中提取索引 ij 的字串。

参数

  • s - 要提取的字符串
  • i - 子串的起始索引
  • j - 字串的结束索引;默认为 -1

返回值

  • 返回提取的字串

示例

print(string.sub("Primers 编程伙伴", 9))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.unpack

string.unpack (fmt, s [, pos])

说明

string.pack 生成的二进制块(字符串)中解包数据。

参数

  • fmt - 格式化字符串
  • s - 要解包的二进制块(字符串)
  • pos - 要解包的起始索引;默认为 1

返回值

  • 返回解包的结果

示例

-- 打包 local binary = string.pack("iid", 100, 200, 3.14159) print("打包大小:", #binary) -- 解包 local v1, v2, v3, pos = string.unpack("iid", binary) print(string.format("解包结果: %d, %d, %.5f", v1, v2, v3))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#string.upper

string.upper (s)

说明

将字符串 s 转换为打写。

参数

  • s - 要转换的字符串

返回值

  • 返回转换后的字符串

示例

print(string.upper("Hello World"))

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#模式匹配

模式匹配是一种在字符串中查找、识别和提取特定模式的技术。在 Lua 中,模式匹配使用基于字符的模式而不是完整的正则表达式,但功能依然强大。

#魔法字符

Lua 的魔法字符是在模式匹配中实用的特殊字符,包含 ^$()%.[]*+-?

除了魔法字符 ^$()%.[]*+-? 以外的字符是普通字符,魔法字符可以实用 % 转义成普通字符。

#基本项

#模式项

  • * - 表示前项匹配 次,且优先匹配最长序列
  • + - 表示前项匹配 次,且优先匹配最长序列
  • - - 表示前项匹配 次,且优先匹配最短序列
  • ? - 表示前项匹配零或一次,且优先匹配一次
  • %n - n 是数字,在 1 到 9 之间,表示第 n 个子捕获
  • %bxy - xy 是两个不同的字符,匹配以 x 开头 y 结尾的字符串
  • %f[set] - 边界模式,匹配 [set][^set] 的边界

#推荐阅读

创建于 2025/10/30

更新于 2025/10/30