Lua正则表达式替换花括号

我想替换花括号以及其内部的文字,例如 something in here {uid} {uid2} 变成 something in here :id :id

我尝试了以下代码:

local v = "something in here {uid} {uid2}"
local regex = "^{([^}]+)}"

print(v:gsub(v:match(regex), ":id"):gsub("{", ""):gsub("}", ""))

但它不起作用。但是,当我删除 "something in here " 时,它就可以正常工作。请帮帮我。

点赞
用户3832970
用户3832970

为了替换花括号内不包含其他花括号的所有子字符串,可以使用以下代码:

v:gsub("{[^{}]*}", ":id")

请参见 Lua demo

local v = "something in here {uid} {uid2}"
res, _ = v:gsub("{([^{}]*)}", ":id")
print(res)
-- something in here :id :id

{[^{}]*} 模式匹配 {,然后匹配任意0个或多个非 {} 的字符,最后匹配 }

备选方案

  • {.-} 将匹配 {,然后尽可能少地匹配任意0个或多个字符(-是懒惰量词),最后匹配 }。 (请参见 此演示
  • 如果您有平衡的嵌套花括号数量,可以使用 v: gsub("%b{}", ":id")(请参见demo),%b{} 将匹配嵌套花括号内的子字符串。
2019-09-04 11:46:24