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)")
-- 忽略 (house) 和 (island)
-- 像 string.gsub(str, "%w+", "bla") 那样工作,通过忽略包含的字符串来替换它们
bla bla (house) bla bla (island)

点赞
用户107090
用户107090

尝试这段代码:

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

然后在输出中删除结尾的()

2020-05-31 18:54:29