如何使用string.find查找模式的最后一个匹配?

3

我一直在尝试查找模式的最后一个出现位置,而不是第一个出现位置,使用字符串中的string.find方法。

例如:在字符串“AAAAABBB”中,我想查找最后一个“A”的位置,而不是第一个。

这种情况是否可行?

谢谢。

2个回答

4
尝试使用一个空的捕获组:
str = "123456AAA7890AAABBBB"
print(str:match(".*()A"))

如果您需要使用string.find,请尝试以下方法:
local _,p = str:find(".*A")
print(p)

3
local str = "123456AAA7890AAABBBB"
local s, e = str:find("A[^A]*$")

print(s)
print(str:sub(s))

或者将字符串反转并使用更简单的 string.find 调用。

local str = "123456AAA7890AAABBBB"
local revstr = str:reverse()
local ind = revstr:find("A")

print(#revstr - ind + 1)
print(str:sub(#revstr - ind + 1))

谢谢,是的..我想到的是反向操作,但考虑到我正在处理的字符串长度,我不知道性能会受到多大影响。 - Yanuar Tanzil
我不明白为什么模式中需要“()”。 - Niccolo M.
哦,不是的。那是测试留下来的。 - Etan Reisner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接