使用 string.gmatch 进行分词
使用 string.gmatch 遍历字符串中的所有匹配项。
使用 string.gmatch 进行分词 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
什么是 string.gmatch?
string.gmatch(s, pattern) 返回一个迭代器,依次返回字符串 s 中 pattern 的所有匹配结果。
遍历单词
通过匹配连续的非空格字符,将字符串拆分为单词。
local s = "the quick brown fox"
for word in s:gmatch("%S+") do
print(word)
end将匹配结果收集到表中
将所有匹配结果收集到表中,以便进一步处理。
local function split(s, pat)
local parts = {}
for token in s:gmatch(pat) do
parts[#parts+1] = token
end
return parts
end
local words = split("one two three", "%S+")
print(#words) -- 3提取数字
使用 %d+ 模式从字符串中提取所有整数。
local s = "x=10, y=20, z=30"
for n in s:gmatch("%d+") do
print(tonumber(n))
end在 gmatch 中使用捕获
当模式包含捕获时,每次迭代都会返回捕获的组,而不是完整匹配结果。
local s = "from=Alice, to=Bob, cc=Carol"
for k, v in s:gmatch("(%w+)=(%w+)") do
print(k, "->", v)
endCSV 分词器
通过捕获逗号之间的所有内容来拆分 CSV 行。
local csv = "apple,banana,cherry,date"
for field in (csv .. ","):gmatch("([^,]*),") do
print(field)
end解析键值对
将类似 HTTP 标头的字符串解析为由键值对组成的表。
local headers = "Content-Type: text/html; Content-Length: 1234"
local parsed = {}
for k, v in headers:gmatch("([%w%-]+): ([^;]+)") do
parsed[k] = v:match("^%s*(.-)%s*$")
end统计模式出现次数
统计某个模式在字符串中出现了多少次。
local function count(s, pat)
local n = 0
for _ in s:gmatch(pat) do n = n + 1 end
return n
end
print(count("banana", "an")) -- 2句子分词器
通过匹配直到标点符号为止的内容,将文本拆分为句子。
local text = "Hello. How are you? Fine!"
for sent in text:gmatch("[^.!?]+[.!?]?") do
print(sent:match("^%s*(.-)%s*$"))
end循环中的 gmatch 与 string.find
gmatch 是遍历所有匹配结果的推荐方式。在 while 循环中使用 string.find 更加冗长,也更容易出错。
Unicode 注意事项
Lua 模式按字节操作。多字节 UTF-8 字符可能无法被单字符模式正确匹配。要获得完整的 Unicode 支持,请使用 UTF-8 库。
gmatch 问题
for w in s:gmatch("%S+") do 会遍历什么内容?
回顾:string.gmatch
string.gmatch 是 Lua 的标准分词器。可以在简洁的迭代器循环中使用它来拆分字符串、提取所有数字、解析键值对以及统计模式出现次数。
常见问题解答
「使用 string.gmatch 进行分词」课时是免费的吗?
是的 — 「使用 string.gmatch 进行分词」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「使用 string.gmatch 进行分词」这节课中我会学到什么?
使用 string.gmatch 遍历字符串中的所有匹配项。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 string.gmatch 进行分词」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Lua 模式语法
- 捕获组和 string.match
- 使用 string.gmatch 进行分词
- 使用 string.gsub 进行转换