需要从 url 中删除特定参数

Need to remove specific parameter from url

我是 Lua 库的新手,我有一个用例,我必须删除特定参数及其值: 例如:

String 1 : ?xyz=true&toekn=4234dadsasda

String 2 : ?toekn=4234dadsasda&test=pass

删除令牌及其值后需要这样的输出

String 1 : ?xyz=true

String 2 : ?test=pass

我尝试了下面的 Lua gsub 函数,但没有成功:

string.gsub(args, "token=.*", " ")

如有任何帮助,谢谢

如果您只能有两个查询参数并且输入中显示的不超过两个,您可以使用

text:gsub("&?token=[^&]+&?", "")

或者,如果你有多个查询参数,你可以使用

text:gsub("([&?])token=[^&]+&?", "%1"):gsub("(.*)&$", "%1")

参见online Lua demo #1 and the online Lua demo #2

详情:

  • &? - 一个可选的 &
  • token= - 文字字符串
  • [^&]+ - &
  • 以外的一个或多个字符
  • &? - 一个可选的 & 字符。

在第二个解决方案中,:gsub("([&?])token=[^&]+&?", "%1")token 之前用 ?& 替换匹配项,下一个 gsub("(.*)&$", "%1") 删除 & 在字符串的末尾,以防参数出现在字符串的末尾。

您可能需要考虑其他条件(使用 &; 作为分隔符 [1])和特殊情况(尾随分隔符和带有 token 的子字符串):

text:gsub("([&;]?)%f[%a]token=[^&;]+([&;]?)",
  function(s1, s2) return s1 and s2 and #(s1..s2) > 1 and s1 or "" end)

此解决方案适用于包含 subtoken 等参数并使用 ; 作为分隔符的查询字符串。该模板使用 %f[%a],这是一个 frontier pattern,它描述了一个零长度边界,其中非字母变为字母(这包括字符串中的第一个字符)。

[1] W3C 建议除了 & 符号分隔符之外,所有 Web 服务器都支持分号分隔符,以允许 application/x-www-form-urlencoded 在 HTML 文档中的 URL 中查询字符串,而不必实体转义 & 符号(wikipedia article on query string).