如何在Lua中替换字符串?实现聊天敏感词替换及代码修正
Lua敏感词替换方案
你的代码核心问题在于对string.gsub的用法误解,它不支持通过索引位置直接替换,且小写匹配后的索引无法对应原字符串的正确位置。以下是修正后的实现:
修正代码
local badwords = { "badword", "badword2", } function censorMessage(msg) local message = msg -- 遍历所有敏感词 for _, word in ipairs(badwords) do -- 构建不区分大小写的完整单词匹配模式,避免误匹配包含敏感词的正常词汇 local pattern = string.format("%%f[%w_]%s%%f[^%w_]", word) -- 替换所有匹配到的敏感词为**** message = message:gsub(pattern, "****") end return message end -- 测试示例 local testMsg = "This is a BadWord and badword2 example" print(censorMessage(testMsg))
关键说明
- 放弃索引替换方案,直接用
gsub的模式匹配功能,彻底避免大小写导致的位置错位问题 %f[%w_]和%f[^%w_]是边界匹配符,确保只替换独立的敏感词,不会误改如"badwording"这类包含敏感词片段的正常词汇- 循环中每次替换后更新原消息,保证所有敏感词都被处理
原代码的问题点
message:gsub(indexStart, "****", indexEnd)是错误用法,gsub的第一个参数必须是匹配模式,而非索引值- 用小写后的字符串获取索引,原字符串若存在大写字母,索引位置会完全不对应,导致替换位置错误
内容的提问来源于stack exchange,提问作者Surge
相关产品推荐
相关产品推荐

