使用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)
代码解释
- 模式
(.-)/([^/]+/[^/]+)/([^/,]+)的作用:(.-):非贪婪匹配任意字符,确保只匹配到目标片段之前的最短路径,避免误匹配前面的层级。/([^/]+/[^/]+)/:匹配目标片段——两个斜杠之间、包含一个斜杠的两段非斜杠字符,符合用户名/密码的格式。([^/,]+):匹配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
相关产品推荐
相关产品推荐

