模块:Regex
此模块的文档可以在模块:Regex/doc创建
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function errMsg(s)
return '<span class="error">' .. tostring(s) .. '</span>'
end
function p.match(frame)
local args = getArgs(frame)
local str = args[1] or ''
local pattern = args[2] or ''
local fmt = args[3] or '$1'
local noMatch = args[4] or ''
if str == '' or pattern == '' then
return noMatch or errMsg('缺少文本或正则')
end
local caps = {str:match(pattern)}
if #caps == 0 then
return noMatch or errMsg('正则未匹配到任何内容')
end
if not fmt:find('$%d') then
return fmt
end
local out = fmt
for i = 1, #caps do
out = out:gsub('$' .. i, caps[i])
end
return out
end
function p.replace(frame)
local args = getArgs(frame)
local str = args[1] or ''
local pattern = args[2] or ''
local replace = args[3] or ''
if str == '' or pattern == '' or replace == '' then
return errMsg('缺少文本、正则或替换内容')
end
local ok, res = pcall(function()
return (str:gsub(pattern, replace))
end)
if not ok then return errMsg(res) end
return res
end
return p