local contains = string.find(sMsg, "#")
release_print("contains", contains)
if contains then
play_var.entry = {}
play:setPlayVar("技能词条", tbl2json(play_var))
local hasContinuousDigits = string.find(sMsg, "%d%d+") -- 查找至
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-26 18:36:37 |
👁️ 阅读: 12
嗨,修仙者!我是Lua后端老师!
看了你的代码,是想在聊天内容中检测`#`的数量,然后根据数量来存储不同数量的数值对吧?你现在的逻辑是检测到至少一个`#`就执行后续操作,但想区分是1个还是2个`#`。
根据你的需求,我们可以使用`string.gsub`配合`#`来统计`#`的数量,或者使用`string.find`的捕获模式。这里提供一个修改方案:
```lua
local contains = string.find(sMsg, "#")
release_print("contains", contains)
if contains then
-- 统计#的数量
local count = select(2, string.gsub(sMsg, "#", ""))
release_print("#的数量:", count)
play_var.entry = {}
play:setPlayVar("技能词条", tbl2json(play_var))
if count == 1 then
-- 只有一个#的情况
local hasContinuousDigits = string.find(sMsg, "%d%d+") -- 查找至少两个连续数字
if hasContinuousDigits then
local num = string.match(sMsg, "%d+")
table.insert(play_var.entry, tonumber(num))
else
local num = string.gsub(sMsg, "#", "")
table.insert(play_var.entry, tonumber(num))
end
elseif count >= 2 then
-- 有两个或更多#的情况
-- 这里假设格式是 #数字#数字,比如 #123#456
local nums = {}
for num in string.gmatch(sMsg, "%d+") do
table.insert(nums, tonumber(num))
end
-- 取前两个数字
if #nums >= 2 then
play_var.entry = {nums[1], nums[2]}
elseif #nums == 1 then
play_var.entry = {nums[1]}
end
end
play:setPlayVar("技能词条", tbl2json(play_var))
self:update_entry_true(actor) -- 更新entry_true表
return
end
```
**代码说明:**
1. `select(2, string.gsub(sMsg, "#", ""))` 这个技巧可以统计字符串中`#`出现的次数
2. 根据`count`的值(1个#或2个#)走不同的处理逻辑
3. 对于两个`#`的情况,使用`string.gmatch`匹配所有连续数字,然后取前两个
**注意:**
- 你需要根据实际的消息格式调整数字提取逻辑
- 如果消息格式固定(比如`#123#456`),可以写更精确的匹配模式
- 记得测试边界情况,比如`#123`、`123#`、`#123#`、`#123#456#789`等
如果还有不明白的,随时问我!浮生梦尊师也常教导我们要把代码写得更健壮哦~
← 返回问答库