我有以下代码:
local a = "/Users/diego/Desktop/nvim-file-location/lua/nvim-file-location/init.lua"
local b = "/Users/diego/Desktop/nvim-file-location"
local r = a:gsub(b, "")
print("path:", a)
print("cwd:", b)
print("replaced:", r)我期望被替换的一个输出如下:
replaced: /lua/nvim-file-location/init.lua但我明白:
path: /Users/diego/Desktop/nvim-file-location/lua/nvim-file-location/init.lua
cwd: /Users/diego/Desktop/nvim-file-location
replaced: /Users/diego/Desktop/nvim-file-location/lua/nvim-file-location/init.lua为什么不起作用?
我也试过这样做:
local a = "/user/diego/foo"
local b = "/diego/foo"
local r = a:gsub(b, "/diego")
print(r)输出和预期的一样!!
/user/diego为什么会发生这种情况?我该如何解决这个问题?
发布于 2022-11-05 12:49:19
string.gsub的第二个参数(在本例中为b)总是被解释为模式。在一种模式中,字符-有一个特殊的含义:它是*的非贪婪版本。
因此,模式的部分m-f可以匹配f、mf mmf等,但是没有什么可以逐字匹配-,因此不能匹配字符串m-f。
为了能够逐字使用模式,您需要转义所有特殊字符,如上面链接的参考手册中所述:
local b = "/Users/diego/Desktop/nvim%-file%-location"https://stackoverflow.com/questions/74327675
复制相似问题