Lua 替换大括号的正则表达式

Lua regex to replace curly braces

我想替换大括号和里面的单词,即 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 " 时它确实有效。请帮忙。

要替换大括号内不包含任何其他大括号的所有子字符串,您可以使用

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+ 字符(- 是惰性量词),然后是 } 字符(参见this demo)
  • 如果嵌套大括号数量均衡,您可以使用 v:gsub("%b{}", ":id")(参见 demo),%b{} 将匹配嵌套大括号内的子字符串。