Lua - 获取字符串中最后一个字符出现的索引

我有一些代表表“路径”的字符串,可以用于迭代表中的值,例如:

"table.subTable[2].anotherTable"

"table.subTable.otherTable.anotherTable"

"table.subTable.otherTable[3]"

\ [2 ]和\ [3 ]是可能指向另一个表的索引。我需要编写一个函数,将最后一个键/索引截断,使"字符串路径"指向前一个(或“父”)表。

例如,上面的字符串应该变为:

"table.subTable[2]"

"table.subTable.otherTable"

"table.subTable.otherTable"

我以为可以通过在字符串中查找最后一个“[或“.”字符,并使用string.sub`进行拆分来完成此操作。

可能有许多其他方法可以实现此目的,例如gmatch,但我不确定如何。谢谢!

点赞
用户9383219
用户9383219

如果你处理的字符串中 .[ 只会出现在索引语法中,你可以使用 path:match('(.+)[.[]')[.[] 看起来很容易混淆,但实际上它是一个集合,包含 .[ 这两个字符。你可以用百分号转义 [[.%[]),但没必要这样做。

如果其中一个表索引是一个包含 .[ 的字符串,比如 table['sub.table'][3],那么这个解决方案将会失效。在这种情况下,解决方案将会更加复杂。你可以使用 LPeg,或在进行字符串匹配之前,用其他字符序列替换字符串中的 .[,然后在字符串匹配后恢复这些字符。

2019-01-01 23:03:56