为什么这段 Lua 代码会返回一个索引?

我在寻找在一个字符串(干草堆)中查找另一个字符串(针)的最后一次出现的索引的问题中找到了lhf的答案中的这个Lua代码....

function findLast(haystack, needle)
  local i=haystack:match(".*"..needle.."()")
  if i==nil then return nil else return i-1 end
end
s='my.string.here.'
print(findLast(s,"%."))
print(findLast(s,"e"))

你可能会认为我会很高兴找到了我原来问题的答案,但恐怕我不仅想知道答案是否有效(它确实可以用于我尝试的所有输入),而且想知道它为什么有效;-)

问题在于,我找不到任何Lua文档表明,当捕获未定义模式时,s:match返回字符串中的索引的行为。

有人可以指引我查找一些确认这一点是定义和预期的行为而不仅仅是一个好巧合,它恰好有效吗?

点赞
用户258523
用户258523

这在手册中有说明。有关模式的部分如下所示:

特殊情况下,空括号()可以捕获当前字符串位置(数字)。例如,如果我们在字符串“flaaap”上应用模式“()aa()”,将会有两个捕获:3和5。

2014-10-02 22:34:56