Lua字符串替换通配符

时间:2012-12-04 02:24:42

标签: string variables replace lua wildcard

我正在尝试使用Lua将某个通配符字符串替换为另一个字符串。 这可能并不清楚,这是我的例子:

如果我有一个目录字符串:

  

C:\可能更改dir名称\另一个更改名称\已知实体文件夹\ workingDir

最终会像这样:

  

C:\ ROOT \ workingDir

允许我替换根目录和当前目录之间的字符串的东西。因此,将替换粗体目录字符串。请记住,目录是可变的,这就是为什么它需要有一个通配符来替换。所以基本上我知道2个“锚”字符串,但其间的所有内容都是未知/可变的。

更新:字符串的存储方式如下:“c:\\ program files(x86)\\”会反复使用反斜杠吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Lua patterns ..

假设“已知固体文件夹”是常量, 您可以使用以下模式

local str = "C:\\ possible changed dir name \\ another change name \\ known solid folder \\ workingDir"
local toFind = "(C:\\).*(known solid folder)"
local toReplace = "C:\\ ROOT"

str = str:gsub(toFind,toReplace)

toFind变量中的.*是您的外卡。它给出了“C:\”和“已知实体文件夹”之间的所有字符

答案 1 :(得分:0)

如果你知道前缀(" C:\")和后缀(" \ workingDir"),为什么不返回"C:\\ROOT\\workingDir"

简单的替换应该有效,但是当"已知的固体文件夹"时,您可能需要小心。包括模板中具有特殊含义的字符:

function root(path, known_folder)
  local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
  return (path:gsub("^(%w:\\).+"..q(known_folder), "%1ROOT"))
end
print(root([[C:\possible...\another change...\known solid folder\workingDir]],
      "known solid folder"))

这会打印C:\ROOT\workingDir