String 捕获Lua中未用平衡圆括号括起的字符串

String 捕获Lua中未用平衡圆括号括起的字符串,string,lua,String,Lua,Lua模式包括%b()等,用于捕获由成对字符串(在本例中为括号)括起的字符串。但是,如果我想捕获除“%b()”之外的所有内容,该怎么办 我所尝试的: str=“一段时间以前(你好)” string.gsub(str,“[^%b()]”,“a”) 但是结果是aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

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

我所尝试的:

str=“一段时间以前(你好)”
string.gsub(str,“[^%b()]”,“a”)
但是结果是
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。我想要的是
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

编辑 为了了解更多的上下文,我想做以下几点

myfunction(“岛上的漂亮房子”)
--应忽略(房屋)和(岛屿)
--例如,应该像string.gsub(str、“%w+”、“bla”)一样工作
--通过忽略封闭字符串
布拉布拉(房子)布拉布拉(岛)
尝试以下代码:

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))
然后删除输出中的尾随
()

尝试以下代码:

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))

然后删除输出中的尾部
()

我不确定Lua是否可以反转
%b()
。可能是因为真正倒装的
%b()
不会匹配括号之外的所有内容,而是匹配没有平衡括号的所有字符串。在编写字符集
[^%b()]
时,Lua跳过%b并匹配任何非
的字符。这就是为什么它要打印
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。我无法想出一个好的模式来回答这个问题。也许其他人会这样做。如果你给出一个准确、真实的用例,这也会有所帮助-可能有比反向平衡检查更好的解决方案。@lhf我已经编辑了我的问题,以获得更具体的示例。我不想删除包含的字符串,但在应用字符串函数时忽略它们,例如
gsub
gmatch
Wow。这正是我想要的。顺便说一句,我不知道可以将一个字符串函数嵌入到另一个字符串函数中。很高兴知道我不确定Lua是否可以反转
%b()
。可能是因为真正倒装的
%b()
不会匹配括号之外的所有内容,而是匹配没有平衡括号的所有字符串。在编写字符集
[^%b()]
时,Lua跳过%b并匹配任何非
的字符。这就是为什么它要打印
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。我无法想出一个好的模式来回答这个问题。也许其他人会这样做。如果你给出一个准确、真实的用例,这也会有所帮助-可能有比反向平衡检查更好的解决方案。@lhf我已经编辑了我的问题,以获得更具体的示例。我不想删除包含的字符串,但在应用字符串函数时忽略它们,例如
gsub
gmatch
Wow。这正是我想要的。顺便说一句,我不知道可以将一个字符串函数嵌入到另一个字符串函数中。很高兴知道,即使括号中没有子字符串,它也可以工作,在这种情况下它什么也不做。即使括号中没有子字符串,它也可以工作,在这种情况下它什么也不做。