模块:Regex:修订间差异
创建页面,内容为“local p = {} local getArgs = require('Module:Arguments').getArgs local function showError(err) return '<span class="error">' .. tostring(err) .. '</span>' end local function performMatch(text, pattern) local result = text:match(pattern) if result == nil then error("No match found") end return result end local function performReplace(text, pattern, use) local result = text:gsub(pattern, use) if result == text then e…” |
无编辑摘要 |
||
| 第2行: | 第2行: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local function | local function errMsg(s) | ||
return '<span class="error">' .. tostring( | return '<span class="error">' .. tostring(s) .. '</span>' | ||
end | end | ||
function p.match(frame) | |||
local | local args = getArgs(frame) | ||
if | local text = args[1] or '' | ||
local pat = args[2] or '' | |||
local okTpl = args[3] or '$1' -- 匹配后返回的模板,默认第一个捕获 | |||
local failTip= args[4] -- 未匹配时返回什么(nil 就返回错误标签) | |||
if text == '' or pat == '' then | |||
return failTip or errMsg('缺少文本或正则') | |||
end | end | ||
local m = {text:match(pat)} -- 放入表,可能捕获多项 | |||
local | if #m == 0 then -- 完全没有匹配 | ||
if | return failTip or errMsg('正则未匹配到任何内容') | ||
end | end | ||
if not | if not okTpl:find('$%d') then | ||
return | return okTpl | ||
end | end | ||
local | local out = okTpl | ||
for i = 1, #m do | |||
out = out:gsub('$' .. i, m[i]) | |||
end | end | ||
return out | |||
end | end | ||
| 第46行: | 第36行: | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local text = args[1] or '' | local text = args[1] or '' | ||
local | local pat = args[2] or '' | ||
local | local repl = args[3] or '' | ||
if text == '' or pat == '' or repl == '' then | |||
if | return errMsg('缺少文本、正则或替换内容') | ||
return | |||
end | end | ||
local ok, res = pcall(function() | |||
return (text:gsub(pat, repl)) | |||
local | |||
end) | end) | ||
if not ok then return errMsg(res) end | |||
if | return res | ||
end | end | ||
return p | return p | ||
2025年10月12日 (日) 00:43的版本
此模块的文档可以在模块: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 text = args[1] or ''
local pat = args[2] or ''
local okTpl = args[3] or '$1' -- 匹配后返回的模板,默认第一个捕获
local failTip= args[4] -- 未匹配时返回什么(nil 就返回错误标签)
if text == '' or pat == '' then
return failTip or errMsg('缺少文本或正则')
end
local m = {text:match(pat)} -- 放入表,可能捕获多项
if #m == 0 then -- 完全没有匹配
return failTip or errMsg('正则未匹配到任何内容')
end
if not okTpl:find('$%d') then
return okTpl
end
local out = okTpl
for i = 1, #m do
out = out:gsub('$' .. i, m[i])
end
return out
end
function p.replace(frame)
local args = getArgs(frame)
local text = args[1] or ''
local pat = args[2] or ''
local repl = args[3] or ''
if text == '' or pat == '' or repl == '' then
return errMsg('缺少文本、正则或替换内容')
end
local ok, res = pcall(function()
return (text:gsub(pat, repl))
end)
if not ok then return errMsg(res) end
return res
end
return p