Lua gsub 正则表达式来替换多个出现的字符



我正在尝试通过删除多个特定字符来修改我的 URL 以使其干净友好

local function fix_url(str)
return str:gsub("[+/=]", {["+"] = "+", ["/"] = "/", ["="] = "="}) --Needs some regex to remove multiple occurances of characters
end
url = "///index.php????page====about&&&lol===you"
output = fix_url(url)

我想实现的输出是这样的:

"/index.php?page=about&lol=you"

但相反,我的输出是这样的:

"///index.php????page====about&&&lol===you"

gsub 是我应该这样做的方式吗?

我不明白如何通过一次调用gsub来做到这一点.下面的代码通过为每个字符调用一次gsub来实现此目的:

url = "///index.php????page====about&&&lol===you"
function fix_url(s,C)
for c in C:gmatch(".") do
s=s:gsub(c.."+",c)
end
return s
end
print(fix_url(url,"+/=&?"))

这是一个可能的解决方案(将 %p 替换为您喜欢的任何字符类(:

local
function fold(s)
local ans = ''
for s in s:gmatch '.' do
if s ~= ans:sub(-1) then ans = ans .. s end
end
return ans
end
local
function fix_url(s)
return s:gsub('%p+',fold) --remove multiple same characters
end
url = '///index.php????page====about&&&lol===you'
output = fix_url(url)
print(output)

最新更新