string - Lua:删除最后一个{..}

标签 string lua pattern-matching

在像 {any {possible}characters}{anything} 这样的字符串中,我想删除最后 {...} 出现的地方,其本身不能包含另一个 {...} 组合。搜索最后一个 { 然后使用 string.sub 没有问题。 但是,是否有一个带有模式匹配的简短命令可以删除最后一个命令,例如:

str = "{any {possible} characters}{anything}"
print(str:gmatch(...))

应该写{任何{可能}字符}

最佳答案

这里有两种可能的解决方案。

末尾没有嵌套大括号:

string.gsub('{any {possible} characters}{anything}', '{[^{}]*}$', '')

这里,{[^{}]*}$ 匹配 {,然后是除 { 之外的任何 0+ 个字符>},然后是必须位于字符串末尾的 } 字符 ($)。

如果末尾有嵌套大括号,请使用以下内容:

string.gsub('{anything}{any {possible} characters}', '%b{}$', '')

这里,%b{}$ 匹配内部有任意数量嵌套大括号的 {...} 子字符串,然后断言字符串末尾的位置与$

参见this Lua demo

请注意,您可以添加 %s* 来匹配任何 0+ 空格(例如,如果存在尾随空格,则很有用)- '%b{}%s*$' .

关于string - Lua:删除最后一个{..},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52659825/

相关文章:

r - 在 R 的循环中将字符串视为对象名称

regex - 在确认空字符串的同时分解字符串中的列表

lua - Lua可以支持不区分大小写的方法调用吗?

regex - 使用 Regex 工具删除两个文件中的空格后比较字段

java - Android/Java - 将 DataInputStream 转换为字符串

java - 从一个字符串中提取两个子字符串

c# - 基于字符数的字符串拆分

c++ - Lua/C++/luabind/与其他lua行为脚本交互中成员函数的延迟执行

Java 正则表达式模式匹配器

c# - 如何在另一张图片中找到模板图片? Kinect 和 AForge 首选