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

在类似于“{任何{可能}字符} {任何内容}”的字符串中,我想删除最后一个{...},它本身不能包含另一个{...}组合。搜索最后一个“{”,然后使用“string.sub”没有问题。 但是,有没有一条模式匹配的短命令可以像以下这样剥离最后一个条目:

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

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

点赞
用户3832970
用户3832970

以下是两种可能的解决方案。

结尾没有嵌套括号:

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

这里的 { [^ {}] *} $ 匹配 {,接着是除 {} 之外的任意0个字符,最后是必须位于字符串末尾( $)的 }

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

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

这里的 %b{}$ 匹配任意数量的嵌套括号内的 {...} 子字符串,并在字符串末尾( $)处断言位置。

请参见 此 Lua 演示

请注意,您可以添加 %s* 来匹配任意 0 个空格(如果有尾随空格,这很有用),例如:'%b{}%s*$'

2018-10-05 07:17:31