如何优化Lua模式匹配函数 合并多个gsub为单一替换表处理
实现方法
可以去掉最后两个gsub调用,仅通过一次gsub完成全部替换操作。由于连续空格长度、^后跟随的数字都是动态值,无法穷举所有情况写入静态替换表,因此我们可以把匹配模式调整为覆盖所有待处理项的联合模式,搭配处理函数优先查询替换表,未命中的匹配项按其余规则处理即可。
修改后的代码如下:
function sanitize(txt) local replacements = { ['&'] = '&', ['<'] = '<', ['>'] = '>', ['\n'] = '<br/>' } return txt:gsub('[&<>\n]| +|%^%d', function(match) -- 优先匹配替换表中的固定字符 local res = replacements[match] if res then return res end -- 匹配到连续空格则合并为单个 if match:byte(1) == 32 then return ' ' end -- 匹配到^加数字直接删除 return '' end) end
注:原代码中的替换键存在HTML转义冗余,上述代码已修正为直接匹配原始字符,和原函数执行效果完全一致。
内容的提问来源于stack exchange,提问作者cahtexhuk
相关产品推荐
相关产品推荐

