Lua正则表达式替换花括号

时间:2019-09-04 11:36:03

标签: regex lua lua-patterns

我想替换花括号,它是在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("}", ""))

但是它不起作用。但是,当我删除“这里的东西”时,它确实起作用。请帮忙。

1 个答案:

答案 0 :(得分:5)

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

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