You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lua的match/gsub批量替换URL中的用户名和密码

解决方案:用Lua的gsub精准替换URL中的指定片段

问题描述

现有包含多个不同路径URL的Lua字符串:

local user_data = "http://127.0.0.1/johndoe/123h456/1, http://127.0.0.1/news/james/98c7654/1.jpg, http://127.0.0.1/data/robert/32165g4/1.dat"

需要将所有URL中倒数第二个斜杠与最后一个斜杠之间的用户名/密码片段(如johndoe/123h456)统一替换为superuser/123456,且URL的目录结构不固定,需从末尾逆向定位目标片段。

实现代码

直接使用Lua的string.gsub结合非贪婪匹配的模式,一步完成全局替换:

local user_data = "http://127.0.0.1/johndoe/123h456/1, http://127.0.0.1/news/james/98c7654/1.jpg, http://127.0.0.1/data/robert/32165g4/1.dat"
local replaced_data = user_data:gsub("(.-)/([^/]+/[^/]+)/([^/,]+)", "%1/superuser/123456/%3")

print(replaced_data)

代码解释

  • 模式(.-)/([^/]+/[^/]+)/([^/,]+)的作用:
    1. (.-):非贪婪匹配任意字符,确保只匹配到目标片段之前的最短路径,避免误匹配前面的层级。
    2. /([^/]+/[^/]+)/:匹配目标片段——两个斜杠之间、包含一个斜杠的两段非斜杠字符,符合用户名/密码的格式。
    3. ([^/,]+):匹配URL的最后一段(文件名或资源标识),直到遇到逗号(URL分隔符)或字符串结尾。
  • 替换规则%1/superuser/123456/%3:保留前面的路径%1和最后的资源片段%3,将中间的目标片段替换为指定值。

运行结果

执行代码后,replaced_data的内容为:

http://127.0.0.1/superuser/123456/1, http://127.0.0.1/news/superuser/123456/1.jpg, http://127.0.0.1/data/superuser/123456/1.dat

可靠性说明

这个方法不受URL前面的目录层级影响,只要目标片段始终是倒数第二个斜杠与最后一个斜杠之间的内容,就能精准匹配替换,不会误改其他路径部分。

内容的提问来源于stack exchange,提问作者Hakan Zencefil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:15:43