Lua gsub正则表达式替换多个字符出现次数

我正在尝试通过删除特定字符的多个出现次数来修改我的 URL 以使其变得简洁友好。

local function fix_url(str)
return str:gsub("[+/=]", {["+"] = "+", ["/"] = "/", ["="] = "="}) --需要一些正则表达式来删除多个字符的出现次数
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 是我应该用来解决这个问题吗?

点赞
用户3735873
用户3735873

下面是一种可能的解决方案(将%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) --删除多个相同的字符
end

url = '///index.php????page====about&&&lol===you'
output = fix_url(url)

print(output)
2017-07-14 21:38:03
用户107090
用户107090

我不知道如何使用一个 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,"+/=&?"))
2017-07-14 22:30:16