【问题标题】:Need to remove specific parameter from url需要从 url 中删除特定参数
【发布时间】:2021-02-22 22:34:16
【问题描述】:

我是 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=.*", " ")

如有任何帮助,谢谢

【问题讨论】:

  • 你为什么尝试token=.*?您的字符串中没有token
  • 字符串 1 和字符串 2 有一个错字,它表示不是 toekn
  • 如果您只能有 2 个参数且不超过 2 个,请尝试 text:gsub("&?token=[^&]+&?", "")
  • @WiktorStribiżew 谢谢,它成功了

标签: regex lua 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 服务器都支持分号分隔符和 & 分隔符,以允许 HTML 文档中的 URL 中的 application/x-www-form-urlencoded 查询字符串,而无需实体转义 & 符号 (wikipedia article on query string)。

【讨论】:

    【解决方案2】:

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

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

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

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

    请参阅online Lua demo #1online Lua demo #2

    详情

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

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

    【讨论】:

    • Pankaj 没有指定,也不确定是否适用,但是如果有更多的参数并且令牌在中间怎么办? "?xyz=true&token=4234dadsasda&foo=bar" 可能会返回 "?xyz=true&foo=bar"
    • @PeterThoeny 我为该场景添加了另一个解决方案。
    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2014-12-10
    • 2015-10-10
    • 2014-10-25
    相关资源
    最近更新 更多