首页 > 解决方案 > 在 Lua 中捕获不被平衡括号括起来的字符串

问题描述

Lua 模式包括%b()捕获由成对字符串(在本例中为括号)包围的字符串等。但是,如果我想捕获除 之外的所有内容"%b()"怎么办?

我试过的:

str = "A time ago (hello)"
string.gsub(str, "[^%b()]", "a")

但结果是aaaaaaaaaaa(aaaaa),即它替换了除成对括号之外的所有内容。我想得到的是aaaaaaaaaaa(hello)相反的。

编辑

有关更多上下文,我想要的是进行以下操作

myfunction("A nice (house) on an (island)")
--should ignore (house) and (island)
--should work like string.gsub(str, "%w+", "bla"), for instance
--by ignoring enclosed strings
bla bla (house) bla bla (island)

标签: stringlua

解决方案


试试这个代码:

s="A nice (house) on an (island)"
print(s:gsub("(.-)(%b())",function (a,b) return a:gsub("%w+","bla")..b end))

这有效,只是它不处理最后一个括号之后的单词。解决方案是确保输入是统一的:

s="A nice (house) on an (island) in the Pacific" .. "()" -- here!
print(s:gsub("(.-)(%b())",function (a,b) return a:gsub("%w+","bla")..b end))

然后删除()输出中的尾随。


推荐阅读