需要从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=.*", " ")

任何帮助杏花,谢谢

您可能需要考虑其他条件(使用&;作为分隔符[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],这是一个边界模式,它描述了一个零长度边界,其中非字母变为字母(这包括字符串中的第一个字符)。

[1] W3C建议所有web服务器除了支持&分隔符之外,还支持分号分隔符,以允许HTML文档中的url中的application/x-www-form-urlencoded查询字符串,而无需实体转义&(维基百科关于查询字符串的文章)。

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

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

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

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

查看在线Lua演示#1和在线Lua演示#2。

细节:

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

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

最新更新