我是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")
删除字符串末尾的&
。