string - 在 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)
解决方案
试试这个代码:
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))
然后删除()
输出中的尾随。
推荐阅读
- docker - 有没有办法找到 Docker 容器在其挂载卷上访问的文件列表(CRUD)
- maven - Maven 万无一失的测试 - 包括和排除
- postgresql - 在 Postgres 中加入和组合表以将特定列中的公共行放在一起
- c++ - 使用CMake创建可以在其他机器上独立运行的可执行文件
- php - 刀片视图不反映更改
- docker - Docker 映像无法运行 docker-entrypoint.sh,但仅在从 Docker Hub 运行时?
- javascript - 更改随机 div 的颜色
- android - 当应用程序具有 MediaBrowserService 时,Videoview 窃取媒体按钮事件
- asynchronous - Kotlin 延续没有恢复
- c++ - 模板类中的 C++20 类外定义